关于VC设置对话框背景及文本颜色的问题 小弟最近做了一个单文档的工程,这个单文档工程里要调用几个自己创建的对话框类,本人想把那几个对话框变得美观一些,想把那几个对话框的背景及文本的颜色,以及文本的字体修改一下,不知道该怎么做,请诸位高手指教一下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在对话框中重载OnCtrlColor()函数,然后添加代码就可以了 主窗口技巧下面的技巧能够同时使用在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); (求救~~)tinyxml读取xml的问题 directx 9.0b 在哪下载?有多大? 关于ActiveX控件在多个网页间使用的问题 求教::VC win32 怎样使键盘选中button按钮! 多线程存储! 简单的sql语句的问题? 初学com看那本书比较好? 来这儿有关本论坛的问题,强烈要求予以解决!!!签名的都有分啊:第一个多给分,最后一个多给分,提出更多问题的多给分,其他人平分!!! 请xiaoyuer(鱼头)来取分,多谢您的帮助! 利用udp传结构问题 [求助]devcon不能安装协议驱动?——求驱动安装程序 网络传数据问题!
在程序.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);