以下技巧可应用于SDI和MDI程序:
在全局函数Run中创建了CMainFrame,修改创建的语句就可以指定窗口的初始大小。在这个函数中,在ShowWindow()之前调用CenterWindow()可以将主窗口在屏幕中央显示,参见代码:
int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT) { ... ... RECT rc = {0, 0, 300, 600}; // 设置窗口的初始位置(0,0)、大小(300,600) if(wndMain.CreateEx(NULL, rc) == NULL) { ATLTRACE(_T("Main window creation failed! ")); return 0; }
wndMain.CenterWindow(); // 居中显示窗口
wndMain.ShowWindow(nCmdShow);
... ...
return nRet;
}
在CMainFrame中有一个消息叫做WM_GETMINMAXINFO负责控制窗体最大/小尺寸的,实现这个消息的响应函数就行了:
BEGIN_MSG_MAP(CMainFrame) ... ... MESSAGE_HANDLER(WM_GETMINMAXINFO, OnGetMinMaxInfo) END_MSG_MAP() ... ... LRESULT CMainFrame::OnGetMinMaxInfo(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) { // TODO: 这里设置窗体的最大/小属性 LPMINMAXINFO lpInfor = (LPMINMAXINFO)lParam; lpInfor->ptMinTrackSize.x = 200; lpInfor->ptMinTrackSize.y = 400; lpInfor->ptMaxTrackSize.x = 800; lpInfor->ptMaxTrackSize.y = 600; return 0; }
可以通过加载系统资源中的字符串,并把字符串作为窗体标题显示出来。要用到CString需加载头文件<atlmisc.h>,在CMainFrame::OnCreate函数中可以设置窗体标题:
CString strInfor;
strInfor.LoadString(IDS_EDITSTRING);
SetWindowText(strInfor);
比如说设置“关于”对话框的字体和背景色,可以设置两个消息的映射:WM_CTLCOLORDLG 和 WM_CTLCOLORSTATIC。在消息响应函数中可以设置字体颜色和背景色:
MESSAGE_HANDLER(WM_CTLCOLORDLG, OnCtrlColor) MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtrlColor) ... ... LRESULT OnCtrlColor(UINT, WPARAM, LPARAM, BOOL&) { // 设置背景模式和文字颜色 SetBkMode((HDC)wParam, TRANSPARENT); // 透明背景 SetTextColor((HDC)wParam, RGB(255, 255, 255)); // 白色文字 return (LRESULT)AtlGetStockBrush(BLACK_BRUSH); }
当一个控件被放置在对话框上时,控件就采用对话框的缺省字体。然而,当一个控件如视图或者分割面板被使用在窗口中时,将使用SYSTEM_FONT字体,这种字体不是很漂亮。要改变字体的话,只要在工程中增加atlmisc.h文件,然后调用AtlGetStockFont取得truetype字体DEFAULT_GUI_FONT,将控件设置成这种字体:
MyControl.SetFont(AtlGetStockFont(DEFAULT_GUI_FONT), TRUE);