VC程式設計經驗彙總 一

2021-04-07 00:16:54 字數 2223 閱讀 5866

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...