DialogWindows 使用技巧文档格式.docx
《DialogWindows 使用技巧文档格式.docx》由会员分享,可在线阅读,更多相关《DialogWindows 使用技巧文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
m_hWnd,GWL_STYLE)|
WS_MINIMIZEBOX|WS_MAXIMIZEBOX);
UpdateWindow();
4.使能对话框右上角关闭按钮
在OnInitDialog中
方法一:
CMenu*menu=GetSystemMenu(FALSE);
menu->
ModifyMenu(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED);
方法二:
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)
然后重载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);
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)
最大化"
elseif(nID==SC_MINIMIZE)
最小化"
elseif(nID==SC_CLOSE)
关闭"
OnSysCommand(nID,lParam);
添加WM_SIZE消息映射函数
OnSize(UINTnType,intcx,intcy)
OnSize(nType,cx,cy);
if(nType==SIZE_MAXIMIZED)
elseif(nType==SIZE_MINIMIZED)
}
elseif(nType==SIZE_RESTORED)
恢复"
------------------------------------------------------------------------