vs2005用win32寫界面程序,有個小問題,就是wm5.0上的X鍵一開始就生成了,並且代表最小化,而不是退出程序。所以想替換成OK鍵,直接關閉程序。
在WM5.0右上角的有2種按鈕,叉和OK,叉代表最小化,OK代表關閉。最小化程序會使得程序佔用內存,沒有釋放內存,會使得系統越跑越慢。而WM5.0中提供的許多程序都是最小化。看了一些資料,主要圍繞msdn查找。
WM_CLOSE對應於後臺內存的關閉。
X鍵:smart monomoze button
OK鍵:done button
C#:
將最小化變爲OK:通過設置form的屬性MinimizeBox,true爲最小化按鈕,false爲OK按鈕。
PPC可以修改,而Smartphone不可以,如果不添加menu中的事件來結束程序的話,那程序始終會以最小化方式保留在系統內部。
修改屬性都是用於.NET CF。
C++:
MFC
ok按鈕
繼承函數 afx_msg void OnOK();
重寫
void C****::OnOK()
{
//你的代碼
}
X按鈕
繼承函數 afx_msg void OnCancel();
重寫
void ****::OnCancel()
{
//你的代碼
}
win32
在WM_CREATE消息處理中加SHDoneButton(HWND,SHDB_SHOW); ok按鈕取代X按鈕,
case WM_CREATE:
SHDoneButton(hWnd,SHDB_SHOW);
然後在WM_COMMAND中處理IDOK
case WM_COMMAND:
{
case IDOK:
DestroyWindow (hWnd);
break;
~~~~
相反,SHDoneButton(hWnd,SHDB_SHOWCANCEL); 顯示X鍵,case IDCANCEL: 對應消息。
其他(以下沒做測試)
MFC
例如CDialog中,在OnOK裏將CDialog::OnOK();註釋可屏蔽OK
CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
加cs.style = WS_NONAVDONEBUTTON;
或在OnInitDialog()中加ModifyStyle(0, WS_NONAVDONEBUTTON, SWP_NOSIZE); 可去掉
在OnInitDialog中加入
SHDoneButton(this->m_hWnd,SHDB_HIDE); //hide ok button in upper right
::CommandBar_Show(this->m_hWnd, FALSE);//hide command bar
"OK" 按鈕隱掉
SHDoneButton(AfxGetMainWnd()->m_hWnd,SHDB_HIDE);
"X" 按鈕隱掉
ModifyStyle(AfxGetMainWnd()->m_hWnd,WS_CAPTION,WS_MINIMIZEBOX,SWP_NOSIZE);
在Frame的 WM_CREATE 消息裏使用
ModifyStyle(m_hWnd, WS_CAPTION, WS_MINIMIZEBOX, SWP_NOSIZE);
去掉X 按鈕
在對話框的WM_INITDIALOG 消息裏使用
ModifyStyle(m_hWnd, WS_CAPTION, WS_MINIMIZEBOX, SWP_NOSIZE);
SHDoneButton(m_hWnd, SHDB_HIDE);
去掉OK按鈕
OK按鈕觸發OnOK事件, X 按鈕觸發OnCancel事件。