工控编程吧
标题:
40上位机VC MFC最大最小化及关闭按钮使用与禁用
[打印本页]
作者:
qq263946146
时间:
2015-11-27 23:00
标题:
40上位机VC MFC最大最小化及关闭按钮使用与禁用
(, 下载次数: 1)
上传
点击文件名下载附件
40上位机VC MFC最大最小化及关闭按钮使用与禁用
功能展示
窗口默认创建都会有最大最小化及关闭按钮,如果想让程序在处理某一功能时,禁止使用这三种按钮时,我们就得实现对三个按钮的屏蔽及恢复,我们当前例程就实现了这一功能,效果如图
要点提示
我们例程是通过 API函数GETWINDOWLONG和SETWINDOWLONG来改变窗口风格,设置最大化和最小化按钮的禁用及恢复的;至于关闭按钮我们通过系统菜单对菜单项的操作来实现;GetSystemMenu(); EnableMenuItem()函数的语法我们查阅MSDN获得
LONG GetWindowLong( HWND hWnd, // handle of window int nIndex // offset of value to retrieve );
hWnd窗口句柄 ; nIndex 大于0的偏移量;
LONG SetWindowLong( HWND hWnd, // handle of window int nIndex, // offset of value to set LONG dwNewLong // new value ); dwNewLong 指定的新的值
实现功能
1.新建基于单文档的应用程序,建立六个菜单项关联六个函数用来设置三个按钮的六种状态;六个函数的函数体为
void CMainFrame::OnMenuablemin() //使用最小化按钮
{
LONG Style;
//获得窗口风格
Style = ::GetWindowLong(m_hWnd,GWL_STYLE);
//设置新的风格
Style |= WS_MINIMIZEBOX;
::SetWindowLong(m_hWnd,GWL_STYLE,Style);
/* //重画窗口边框
CRect Rect;
GetWindowRect(&Rect);
::SetWindowPos(m_hWnd,HWND_TOP,Rect.left,Rect.top,Rect.Width(),Rect.Height(),SWP_DRAWFRAME);
*/
}
void CMainFrame::OnMenuablemax() //使用最大化按钮
{
LONG Style;
//获得窗口风格
Style = ::GetWindowLong(m_hWnd,GWL_STYLE);
//设置新的风格
Style |= WS_MAXIMIZEBOX;
::SetWindowLong(m_hWnd,GWL_STYLE,Style);
/* //重画窗口边框
CRect Rect;
GetWindowRect(&Rect);
::SetWindowPos(m_hWnd,HWND_TOP,Rect.left,Rect.top,Rect.Width(),Rect.Height(),SWP_DRAWFRAME);
*/
}
复制代码
void CMainFrame::OnMenuableclose() //使用关闭按钮
{
//获得系统菜单
CMenu *pMenu = GetSystemMenu(false);
//获得关闭按钮ID
UINT ID = pMenu->GetMenuItemID(pMenu->GetMenuItemCount()-1);
//使关闭按钮可用
pMenu->EnableMenuItem(ID,MF_ENABLED);
}
void CMainFrame::OnMenudisclose() //禁用关闭按钮
{
//获得系统菜单
CMenu *pMenu = GetSystemMenu(false);
//获得关闭按钮ID
UINT ID = pMenu->GetMenuItemID(pMenu->GetMenuItemCount()-1);
//使关闭按钮无效
pMenu->EnableMenuItem(ID,MF_GRAYED);
}
void CMainFrame::OnMenudismin() //禁用最小化按钮
{
LONG Style;
//获得窗口风格
Style = ::GetWindowLong(m_hWnd,GWL_STYLE);
//设置新的风格
Style &= ~(WS_MINIMIZEBOX);
::SetWindowLong(m_hWnd,GWL_STYLE,Style);
/* //重画窗口边框
CRect Rect;
GetWindowRect(&Rect);
::SetWindowPos(m_hWnd,HWND_TOP,Rect.left,Rect.top,Rect.Width(),Rect.Height(),SWP_DRAWFRAME);
*/
}
复制代码
void CMainFrame::OnMenudismax() //禁用最大化按钮
{
LONG Style;
//获得窗口风格
Style = ::GetWindowLong(m_hWnd,GWL_STYLE);
//设置新的风格
Style &= ~(WS_MAXIMIZEBOX);
::SetWindowLong(m_hWnd,GWL_STYLE,Style);
/* //重画窗口边框
CRect Rect;
GetWindowRect(&Rect);
::SetWindowPos(m_hWnd,HWND_TOP,Rect.left,Rect.top,Rect.Width(),Rect.Height(),SWP_DRAWFRAME);
*/
}
复制代码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/7a8ca665545d9bd5a7028ff8a6923457/0/0/w_19rtacacf1.swf-albumId=4944463409-tvId=4944463409-isPurchase=0-cnId=12[/iqiyi]
源码及视频下载
(仅在电脑可见)
(, 下载次数: 1)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4