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事件。