小弟最近做了一个单文档的工程,这个单文档工程里要调用几个自己创建的对话框类,本人想把那几个对话框变得美观一些,想把那几个对话框的背景及文本的颜色,以及文本的字体修改一下,不知道该怎么做,请诸位高手指教一下。

解决方案 »

  1.   

    在对话框中重载OnCtrlColor()函数,然后添加代码就可以了
      

  2.   

    主窗口技巧下面的技巧能够同时使用在SDI和MDI应用程序中:1.设置窗口生成时的大小
     在程序.CPP文件的Run()函数中使用下面的技术可以控制窗口生成时的大小尺寸。用你想要的窗口大小设置rect的值,然后将这个值作为第二个函数传递给CreateEx()函数,如下所示:
     RECT rc = {0, 0, 380, 265};
     if(wndMain.CreateEx(NULL, rc) == NULL)
    2.将主窗口在桌面中央显示
     要让主窗口在桌面中央显示,只要在应用程序的.CPP文件的Run()的函数的ShowWindow()命令前增加下面的一行代码:
     wndMain.CenterWindow();
    3.设置最小/最大尺寸
     如果你想要控制你的主窗口的最大最小尺寸,你要在在头文件mainframe.h的CMainFrame消息映射表中增加下面的消息处理过程。
     MESSAGE_HANDLER(WM_GETMINMAXINFO, OnGetMinMaxInfo)
     完全实现功能,还需要在文件中增加处理函数:
     LRESULT OnGetMinMaxInfo(UINT, WPARAM, LPARAM lParam, BOOL&)
     { // lParam传递MINMAXINFO结构的指针
       LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam;   // 改变size结构中的相应的值为我们想要的窗口大小值
       lpMMI->ptMinTrackSize.x = 200; // 最小宽度
       lpMMI->ptMinTrackSize.y = 150; // 最小高度
       lpMMI->ptMaxTrackSize.x = 600; // 最大宽度
       lpMMI->ptMaxTrackSize.y = 450; // 最大高度   return 0; }
    4.动态设置标题
     是可以通过加载资源中的字符串生成Cstring对象,然后通过这个对象实现动态设置窗口标题。把下面的代码加入到OnCreate()函数中就可以  完成实现这个功能。另外需要在项目中#include “atlmisc.h”,这个文件定义了Cstring类。你能够用LoadString()加载最长255个字符的  字符串。
     CString str;
     str.LoadString(IDS_EDITSTRING);
     SetWindowText(str);
    5. Flat-style Toolbar 平面风格工具栏
     使用WTL AppWizard生成程序的时候,如果没有选择rebar的话,生成的工具栏是标准立体按钮。如果你想在没有rebar时工具栏有平面风格,  只要在主框架OnCreate函数的创建工具栏的代码后边增加以下代码就可以了:
     CToolBarCtrl tool = m_hWndToolBar;
     tool.ModifyStyle(0, TBSTYLE_FLAT);
     Dialog Tips 对话框技巧
     以下的技巧可以使用在对话框或者基于对话框的应用程序中。下边的图显示了我们的示例函数的About对话框,其中使用了两个技巧
    6. Dialog Text and Background Color 对话框文字和背景的颜色
     这个技巧提供了简单快速改变对话框的文字或背景颜色的方法。这篇文章示例程序的About对话框里,我们使用SetTextColor设置文字颜色为  白色。北京颜色使用“Stock brush”设置成黑色。第一步是在对话框消息映射表中增加以下的两行代码:
     MESSAGE_HANDLER(WM_CTLCOLORDLG, OnCtrlColor)
     MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtrlColor)
     第二步是在OnCtrlColor函数中改变文字和背景的颜色。将背景模式设置为透明,这样可以正确显示静态控件和group box控件文字。接着,  将文字设置成我们想要的颜色,最后设置背景brush。
     在项目中增加atlmisc.h头文件,因为AtlGetStockBrush()函数在这个头文件中定义。有几种Stock brusk可以选择WHITE_BRUSH,   LTGRAY_BRUSH, GRAY_BRUSH, DKGRAY_BRUSH, 和BLACK_BRUSH,如果使用其它颜色,你需要生成新的brush,
     LRESULT OnCtrlColor(UINT, WPARAM, LPARAM, BOOL&)
     { // 设置背景模式和文字颜色
       SetBkMode((HDC)wParam, TRANSPARENT); // 透明背景
       SetTextColor((HDC)wParam, RGB(255, 255, 255)); // 白色文字   return (LRESULT)AtlGetStockBrush(BLACK_BRUSH); }
    7.动态交换按钮位置
     下面的代码来自About对话框的OnInitDialog()函数中,用来交换OK和Cancel按钮的位置。其中关键点是将屏幕位置如何转换成相对于Client  的位置。
     CButton bOk = GetDlgItem(IDOK));
     CButton bCancel = GetDlgItem(IDCANCEL)); // 取得按钮位置
     RECT rcOk, rcCancel;
     bOk.GetWindowRect(&rcOk);
     ScreenToClient(&rcOk);
     bCancel.GetWindowRect(&rcCancel);
     ScreenToClient(&rcCancel); // 交换按钮位置
     bOk.SetWindowPos(NULL, &rcCancel, SWP_NOZORDER | SWP_NOSIZE);
     bCancel.SetWindowPos(NULL, &rcOk, SWP_NOZORDER | SWP_NOSIZE);
     控件技巧
     技巧8适用于报表类型的listview控件,技巧9和10适用于接受text的任何控件,如edit控件和richedit控件等。
    8.平面风格的ListView头
     将报表型的listview的头控件改成平面外观,只要如下取得头控件对象,并且修改它的类型
     CHeaderCtrl hdr = MyListView.GetHeader();
     hdr.ModifyStyle(HDS_BUTTONS, 0);
    9.显示整数
     在项目中增加atlmisc.h文件,这个文件定义了Cstring类。然后使用下面的代码在控件中显示整数值
     int nValue = 9999;
     CString sInteger;
     sInteger.Format("%i", nValue);
     MyControl.SetWindowText(sInteger);
    10.显示资源字符串
     使用atlmisc.h头文件中的辅助函数AtlLoadString加载长度可以超过255个字符的字符串,然后将这个字符串显示到控件中。示例程序中使用  下面的代码实现在edit控将中显示字符串。当在资源字符串表中输入字符串时,要使用\r\n来分行,仅仅\n不能正确分行。
     TCHAR cArray[1000];
     AtlLoadString(IDS_EDITSTRING, cArray, 1000 + 1);
     MyControl.SetWindowText(cArray);
     附加技巧
     下面的技巧可以使用在所有的控件中
    11.缺省字体
     当一个控件被放置在对话框上时,控件就采用对话框的缺省字体。然而,当一个控件如视图或者分割面板被使用在窗口中时,将使用SYSTEM_FONT字体,这种字体不是很漂亮。要改变字体的话,只要在工程中增加atlmisc.h文件,然后调用AtlGetStockFont取得truetype字体DEFAULT_GUI_FONT,将控件设置成这种字体:
     MyControl.SetFont(AtlGetStockFont(DEFAULT_GUI_FONT), TRUE);