vc程式設計經驗彙總(一)
1. 視窗最大化、最小化的實現
當我們不能用標題欄的最大化、最小化及恢復按鈕而又需在其他的地方實現這些功能,可以在指定的訊息處理函式裡新增:
windowplacement wndpl;
windowplacement *pwndpl;
pwndpl = &wndpl;
getwindowplacement(pwndpl);
pwndpl->showcmd = sw_showminmized; //實現視窗最小化
setwindowplacement(pwndpl);
其中getwindowplacement()函式獲取當前視窗布局的結構windowplacement的結構變數指標,結構windowplacement定義為:
typedef struct tagwindowplacementwindowplacement;
其中的成員變數showcmd確定當前視窗的狀態,取值一般為:
·sw_hide:隱藏視窗
·sw_minimize:最小化指定的視窗
·sw_restore:恢復原來的大小
·sw_show:以原來的大小啟用並顯示
·sw_showmaximized:啟用並最大化視窗
setwindowplacement()函式就是按windowplacement的設定來顯示視窗
2. 為什麼要使用getsafehwnd()函式
當我們想得到乙個視窗物件(cwnd的派生物件)指標的控制代碼(hwnd)時,最安全的方法是使用getsafehwnd()函式,通過下面的例子來看其理由:
cwnd *pwnd = findwindow(「explorewclass」,null); //希望找到資源管理器
hwnd hwnd = pwnd->m_hwnd; //得到它的hwnd
這樣的**當開始得到的pwnd為空的時候就會出現乙個「general protection error」,並關閉應用程式,因為一般不能對乙個null指標訪問其成員,如果用下面的**:
cwnd *pwnd = findwindow(「explorewclass」,null); //希望找到資源管理器
hwnd hwnd = pwnd->getsafehwnd(); //得到它的hwnd
就不會出現問題,因為儘管當pwnd是null時,getsafehwnd仍然可以用,只是返回null,通過getsafehwnd()的實現**就更清楚了:
_afxwin_inline hwnd cwnd::getsafehwnd() const
return this == null?null:m_hwnd;
3. 如何使程式處於極小狀態
如果我們不想讓程式的視窗被別人看見,就可以讓它保持在極小狀態:在恢復程式視窗的時候,window會傳送wm_queryopen訊息,只要在其訊息處理函式裡返回false就可以了。
bool cmainframe::onqueryopen()
return false;
4. 如何禁止和能用關閉按鈕
cmenu *pmenu = afxgetmainwnd()->getsystemmenu(false);
if(pmenu)
pmenu->enablemenuitem(sc_close,mf_bycommand|mf_grayed);
恢復時只需將mf_grayed改為mf_enabled
5. 如何在程式中延時
方法一:
使用sleep函式,如延時2秒,用sleep(2000);
方法二:
使用sleep函式的不利在於延時期間不能處理其他的訊息,如果時間太長,就好象宕機一樣,利用coledatetime類和coledatetimespan類實現延時就不會出現那樣的問題:
coledatetime start_time = coledatetime::getcurrenttime();
coledatetimespan end_time = coledatetime::getcurrenttime()-start_time;
while(end_time.gettotalseconds() <= 2)
msg msg;
getmessage(&msg,null,0,0);
pretranslatemessage(&msg);
end_time = coledatetime::getcurrenttime-start_time;
這樣在延時的時候我們也能夠處理其他的訊息。
VC程式設計經驗彙總 一
1.視窗最大化 最小化的實現 當我們不能用標題欄的最大化 最小化及恢復按鈕而又需在其他的地方實現這些功能,可以在指定的訊息處理函式裡新增 windowplacement wndpl windowplacement pwndpl pwndpl wndpl getwindowplacement pwnd...
VC程式設計經驗彙總 一
1.視窗最大化 最小化的實現 當我們不能用標題欄的最大化 最小化及恢復按鈕而又需在其他的地方實現這些功能,可以在指定的訊息處理函式裡新增 windowplacement wndpl windowplacement pwndpl pwndpl wndpl getwindowplacement pwnd...
VC程式設計經驗彙總 一
1.視窗最大化 最小化的實現 當我們不能用標題欄的最大化 最小化及恢復按鈕而又需在其他的地方實現這些功能,可以在指定的訊息處理函式裡新增 windowplacement wndpl windowplacement pwndpl pwndpl wndpl getwindowplacement pwnd...