使用vs2008+sp1建立懸浮視窗的步驟: (自己寫的文件, 以備以後使用)
1. 建立懸浮視窗類
每乙個懸浮視窗都是乙個cdockablepane的派生類的物件, 因此要為每乙個懸浮視窗建立乙個新類
1.1 新增類
通過選單project->add class...或者在類檢視中工程名字處右鍵選擇add->class...新增類
選擇mfc class, 點add按鈕進入下一步
class name處寫入新類的名字, 這裡用cdock, 選擇base class為cdockablepane
按finish按鈕, 新增類完成.
1.2 新增訊息處理函式
一般至少要處理兩個訊息, 乙個是wm_create, 乙個是wm_size, 具體步驟為:
(1) 標頭檔案中新增函式宣告(函式名及引數不可寫錯)
protected:
afx_msg int oncreate(lpcreatestruct lpcreatestruct);
afx_msg void onsize(uint ntype, int cx, int cy);
(2) cpp檔案中新增訊息對映
begin_message_map(cdock, cdockablepane)
on_wm_create()
on_wm_size()
end_message_map()
這裡begin_message_map和end_message_map巨集都是自動生成的, 只需要新增中間兩行**即可
(3) 新增函式實現部分
int cdock::oncreate(lpcreatestruct lpcreatestruct)
void cdock::onsize(uint ntype, int cx, int cy)
1.3 新增控制項
現在建立的cdock類中由於沒有任何控制項, 因此如果現在建立該類的物件並顯示, 該區域中由於全是垃圾資料, 故可能該視窗顯示時為花屏. 如果程式執行期間出現類似花屏的問題, 大概會有幾種可能性: 1. 沒有建立控制項 2. 已建立控制項, 但控制項位置不對或未覆蓋整個的dockablepane 3. 控制項雖然佔據整個區域, 但不能自動重新整理
這裡以新增乙個listbox為例:
(1) 在類的標頭檔案中新增控制項物件, **為:
protected:
clistbox _listbox;
(2) 在oncreate()中新增建立控制項視窗的**:
這裡必須要注意, 需要先呼叫基類的函式oncreate()
int cdock1::oncreate(lpcreatestruct lpcreatestruct)
return 0;
}
(3) 在onsize中設定各個控制項的位置
這裡要注意的是, 需要將控制項布滿整個視窗. 這裡只有乙個listbox, 故可以直接用listbox覆蓋視窗.
同理, 必須要先呼叫基類函式cdockablepane::onsize(ntype, cx, cy)
void cdock::onsize(uint ntype, int cx, int cy)
if (_listbox.getsafehwnd() != null)
2. 在程式中新增懸浮視窗物件
上面一步只是給工程新增了乙個懸浮視窗類, 但並沒生成該類的例項. 這裡建立該例項(在cmainframe類中)
2.1 在主框架類宣告中新增物件, **為:
protected:
cdock m_wnddock;
2.2 建立dockablepane的視窗, 在主框架的oncreate()函式中
(注: 這裡我建議在oncreate函式中自動生成**enableautohidepanes(cbrs_align_any)的後面新增)
int cmainframe::oncreate(lpcreatestruct lpcreatestruct)
...
}2.3 給懸浮視窗新增icon, 暫時省略.
3. 設定視窗懸浮方式, 令視窗懸浮
3.1 設定視窗懸浮位置
這部分**也應該在mainframe類的oncreate函式中, 而且緊跟建立懸浮視窗的後面.
設定懸浮位置只需要呼叫cdockablepane::enabledocking即可
m_wnddock.enabledocking(cbrs_align_any);
其中, 引數可以是cbrs_align_top, cbrs_align_right, cbrs_align_bottom, cbrs_align_any
3.2 令視窗懸浮
欲使乙個cdockablepane物件懸浮, 只需要呼叫框架類的dockpane函式即可:
dockpane(&m_wnddock);
但是若有另外乙個懸浮視窗的物件需要和m_wnddock在一起顯示, 構成乙個組(就像vs的資源視力和類檢視), 那麼第二個懸浮視窗需要使用cdockablepane類的attchtotabwnd函式, **如下:
dockpane(&m_wnddock);
cdockablepane *ptabbedbar = null;
m_wnddock2.attachtotabwnd(&m_wnddock, dm_show, false, &ptabbedbar);
MFC模擬360懸浮窗加速球視窗
實現類似360懸浮視窗這樣的效果,當視窗在螢幕邊緣時,滑鼠移開,就自動向邊緣隱藏,滑鼠放上去,就又平滑顯示出來。正常狀態 邊緣自動隱藏 mfc實現不規則視窗 然後需要給沒有標題欄的視窗增加拖拽移動的功能,這個就是自己手動傳送乙個訊息,使windows認為滑鼠在標題條上 對於視窗的移動顯示隱藏,使用了...
桌面懸浮視窗(可拖動)
一 開發前原理簡述 桌面懸浮視窗,如360的清理加速等懸浮按鈕 呼叫windowmanager,並設定windowmanager.layoutparams的相關屬性,通過windowmanager的addview方法建立view,這樣產生出來的view根據windowmanager.layoutpa...
Qt建立停靠懸浮視窗
1.qt實現視窗停靠和懸浮使用類qdockwidget,它有兩個重要方法用來設定停靠特性以及停靠區域,dw1 setfeatures qdockwidget dockwidgetmovable qdockwidget dockwidgetclosable 設定停靠視窗特性,可移動,可關閉dw1 se...