DialogWindows 使用技巧.docx
- 文档编号:2942902
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:24
- 大小:24.14KB
DialogWindows 使用技巧.docx
《DialogWindows 使用技巧.docx》由会员分享,可在线阅读,更多相关《DialogWindows 使用技巧.docx(24页珍藏版)》请在冰豆网上搜索。
DialogWindows使用技巧
注:
以下代码以一个名为CTest6Dlg的对话框类为例
--------------------------------------------------------------------------------
1.在任务栏隐藏对话框
ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);
--------------------------------------------------------------------------------
2.使对话框为顶层窗口
SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
--------------------------------------------------------------------------------
3.在运行时添加最大化,最小化按钮
SetWindowLong(this->m_hWnd,GWL_STYLE,
GetWindowLong(this->m_hWnd,GWL_STYLE)|
WS_MINIMIZEBOX|WS_MAXIMIZEBOX);
UpdateWindow();
--------------------------------------------------------------------------------
4.使能对话框右上角关闭按钮
在OnInitDialog中
方法一:
CMenu*menu=GetSystemMenu(FALSE);
menu->ModifyMenu(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED);
方法二:
CMenu*menu=GetSystemMenu(FALSE);
menu->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED);
--------------------------------------------------------------------------------
5.当对话框一部分在屏幕外时,显示全部对话框
SendMessage(DM_REPOSITION);
--------------------------------------------------------------------------------
6.改变鼠标外形
添加WM_SETCURSOR消息映射函数
BOOLCTest6Dlg:
:
OnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage)
{
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_HELP));
return0;
}
--------------------------------------------------------------------------------
7.改变对话框背景色和文本颜色
在CTest6App的InitInstance中添加
SetDialogBkColor(RGB(255,0,0),RGB(0,255,0));
--------------------------------------------------------------------------------
8.改变对话框caption上的图标
导入自己的图标资源到工程中,把原来ID为IDR_MAINFRAME的资源删除,把新的图标的ID命名为IDR_MAINFRAME
--------------------------------------------------------------------------------
9.在主对话框显示前,显示一个login对话框
BOOLCTest6App:
:
InitInstance()
{
//...
intnResponse;
CLoginDlgloginDlg;
nResponse=loginDlg.DoModal();
if(nResponse==IDOK)
{
}
if(nResponse==IDCANCEL)
{
returnFALSE;
}
CTest6Dlgdlg;
m_pMainWnd=&dlg;
intnResponse=dlg.DoModal();
if(nResponse==IDOK)
{
}
elseif(nResponse==IDCANCEL)
{
}
returnFALSE;
}
然后重载CLoginDlg对话框的哦OnOK(),在其中判断条件
voidCLoginDlg:
:
OnOK()
{
if(条件满足)
CDialog:
:
OnOK();
else
AfxMessageBox(_T("invalidpassword!
"));
}
--------------------------------------------------------------------------------
10.在对话框中添加工具栏
方法一:
添加以下代码到OnInitDialog中
if(!
m_wndToolBar.Create(this)||!
m_wndToolBar.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("FailedtoCreateDialogToolbar\n");
EndDialog(IDCANCEL);
}
CRectrcClientOld;//久客户区RECT
CRectrcClientNew;//加入TOOLBAR后的CLIENTRECT
GetClientRect(rcClientOld);//
//Calledtorepositionandresizecontrolbarsintheclientareaofawindow
//ThereposQueryFLAGdoesnotreallytrawtheToolbar.Itonlydoesthecalculations.
//AndputsthenewClientRectvaluesinrcClientNewsowecandotherestoftheMath.
//重新计算RECT大小
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,
AFX_IDW_CONTROLBAR_LAST,
0,
reposQuery,
rcClientNew);
//AlloftheChildWindows(Controls)nowneedtobemovedsotheTollbardoesnotcoverthemup.
//所有的子窗口将被移动,以免被TOOLBAR覆盖
//OffesttomoveallchildcontrolsafteraddingTollbar
//计算移动的距离
CPointptOffset(rcClientNew.left-rcClientOld.left,
rcClientNew.top-rcClientOld.top);
CRectrcChild;
CWnd*pwndChild=GetWindow(GW_CHILD);//得到子窗口
while(pwndChild)//处理所有子窗口
{
//移动所有子窗口
pwndChild->GetWindowRect(rcChild);
ScreenToClient(rcChild);
rcChild.OffsetRect(ptOffset);
pwndChild->MoveWindow(rcChild,FALSE);
pwndChild=pwndChild->GetNextWindow();
}
CRectrcWindow;
GetWindowRect(rcWindow);//得到对话框RECT
rcWindow.right+=rcClientOld.Width()-rcClientNew.Width();//修改对话框尺寸
rcWindow.bottom+=rcClientOld.Height()-rcClientNew.Height();
MoveWindow(rcWindow,FALSE);//RedrawWindow
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
方法二:
--------------------------------------------------------------------------------
11.响应对话框的最大化、最小化、关闭、恢复事件
方法一:
添加WM_SYSCOMMAND消息映射函数
voidCTest6Dlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
if(nID==SC_MAXIMIZE)
{
AfxMessageBox(_T("最大化"));
}
elseif(nID==SC_MINIMIZE)
{
AfxMessageBox(_T("最小化"));
}
elseif(nID==SC_CLOSE)
{
AfxMessageBox(_T("关闭"));
}
CDialog:
:
OnSysCommand(nID,lParam);
}
方法二:
添加WM_SIZE消息映射函数
voidCTest6Dlg:
:
OnSize(UINTnType,intcx,intcy)
{
CDialog:
:
OnSize(nType,cx,cy);
if(nType==SIZE_MAXIMIZED)
{
AfxMessageBox(_T("最大化"));
}
elseif(nType==SIZE_MINIMIZED)
{
AfxMessageBox(_T("最小化"));
}
elseif(nType==SIZE_RESTORED)
{
AfxMessageBox(_T("恢复"));
}
}
------------------------------------------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Dialog Windows 使用技巧 使用 技巧
![提示](https://static.bdocx.com/images/bang_tan.gif)