[学习SDK]如果改变编辑框控件中的字体? 我用VC创建了一个SDK工程,然后用资源编辑器新建了一个对话框,并在其中添加了几个标准控件。但是,我觉得它运行时的样子不好看,想改变它的外观(字体和背景)。请问应该使用什么函数??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);pEdit->SetFont( &m_pFont );m_pFont必须为事先创建好的类成员CFont *m_pFont 我查过了论坛中的其它帖子,说是在WM_CTLCOLOREDIT中处理,于是我在其父窗口过程中加入了以下代码: case WM_CTLCOLOREDIT : hdcEdit = (HDC) wParam; // handle to display context hwndEdit = (HWND) lParam; // handle to static control SelectObject (hdcEdit,GetStockObject(SYSTEM_FIXED_FONT)) ; SetTextColor (hdcEdit, RGB(0,0,255)) ; SetBkColor (hdcEdit, RGB(0,0,255)) ; return FALSE ;结果,编辑框中文字字体是变了,但是字的颜色与编辑框的背景却没有发生变化!请问如何处理? 还需要加入:::SetBkMode(hdcEdit, TRANSPARENT); 楼上的兄台,我的程序没有使用MFC方式,而是使用的WIN32 SDK方式。我细看了一下MSDN,发现我的代码应该返回TRUE。修改后果然成功了!但是,我又有了两个新的问题出来了:(1)虽然我改变了编辑框中的字体,但是编辑框本身的高度却不能自适应字体的高度。所以,编辑框中的字看不清下半身……(2)虽然我通过这段代码改变了编辑框中的字体及背景颜色,但是此时对话框中是只有一个编辑框!如果是多个编辑框,那样我该如何区分它们呢?是取wParam的低字节吗? 1)我提供的方法实际上是将Edit的窗口字体设置,Edit自身会自动适应字体的大小,而你用的方法可能只是将他显示的字体改变,而没有适应字体的大小变更Edit控件的尺寸。2)你的WM_CTLCOLOREDIT处理中return NULL_BRUSH;(好象HOLLOW_BRUSH也可以)就可以改变色彩了3)wParam是dc,而lParam是Edit控件的HWND,因此只要比较::GetDlgCtrlID((HWND)lParam)和你的资源ID就可以确定那个需要改色彩或者改不同的色彩了 系统定义:#define WHITE_BRUSH 0#define LTGRAY_BRUSH 1#define NULL_BRUSH 5#define HOLLOW_BRUSH NULL_BRUSH很奇怪的是你返回FALSE,则表示使用WHITE_BRUSH,因此正常但当你返回TRUE,应该表示使用了LTGRAY_BRUSH,你的控件应该使用LTGRAY_BRUSH作为背景色,不知道为何可以使用你设置的色彩郁闷中...... ==================================================================================(1)虽然我改变了编辑框中的字体,但是编辑框本身的高度却不能自适应字体的高度。所以,编辑框中的字看不清下半身……(2)虽然我通过这段代码改变了编辑框中的字体及背景颜色,但是此时对话框中是只有一个编辑框!如果是多个编辑框,那样我该如何区分它们呢?是取wParam的低字节吗?==================================================================================这两个问题我还是没有解决呀!!! 第一个问题我用MFC程序通过SetFont的方法是成功的,注意CFont必须是全局保存,窗口析构时删除第二个问题:#define IDC_EDIT1 20001#define IDC_EDIT3 20002#define IDC_EDIT3 20003if( GetDlgCtrlID(hdcEdit) == IDC_EDIT1 ){ SetTextColor (hdcEdit, RGB(0,255,255)) ; SetBkColor (hdcEdit, RGB(255,0,255)) ; return (HBRUSH)::GetStockObject(NULL_BRUSH);}else if( GetDlgCtrlID(hdcEdit) == IDC_EDIT1 ){ SetTextColor (hdcEdit, RGB(255,0,255)) ; SetBkColor (hdcEdit, RGB(0,255,255)) ; return (HBRUSH)::GetStockObject(NULL_BRUSH);}else if( GetDlgCtrlID(hdcEdit) == IDC_EDIT1 ){ SetTextColor (hdcEdit, RGB(0,0,0)) ; SetBkColor (hdcEdit, RGB(0,0,255)) ; return (HBRUSH)::GetStockObject(NULL_BRUSH);}return (HBRUSH)::GetStockObject(WHITE_BRUSH); 可能是HFont字体类型不是静态的或者全局的 find anwser in 《Programming Window》 谢谢“非云”兄的大力回复……因为我还没有用到MFC,所以关于这个问题,我还是查看一下《Programming Windows》吧(其实我还没有认真看这本书)。 《Programming Windows》这本太长了一点,而且是英文版,我可能要很久才能看得完。有没有大虾可以现在就给我答案的???谢谢!!! 改变EDIT背景和字体:LRESULT CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ static HWND hEdit; static HFONT hFont; static HBRUSH hBrush; HDC hdc; switch(uMsg) { case WM_INITDIALOG: hEdit=GetDlgItem(hWnd, IDC_EDIT1); // IDC_EDIT1=你的Edit Control的ID hBrush=CreateSolidBrush(RGB(0, 0, 255)); //蓝色 //改变字体 hFont=CreateFont(,....,"FONTNAME"); SendMessage(hEdit, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE,0)); return TRUE; case WM_CTLCOLOREDIT: //设置前景色 if(IDC_EDIT1==GetWindowLong((HWND)lParam, GWL_ID)) { hdc = (HDC) wParam; SetTextColor(hdc, 0x00ffff); //黄色前景 return (LONG)hBrush; } return FALSE; case WM_DESTROY: DeleteObject(hFont); DeleteObject(hBrush); return 0; default: break; }} 连接数据库运行时出现的“无效指针” 怎么设置CStatic的为小图标啊? Visual C++ 技术内幕(第四版)配套光盘 怎么删去CListCtrl中的一列的数据?? 利用DCOM编过程序的请进来看看 那位有解多元方程的代码,贴一个看看!谢谢先! CCombobox插入选项时,能否任意指定索引? 我网吧的p4机器打游戏会停顿10-30秒后又好了,过一会儿又这样了! 以前看看帖 会的给点意见 现在一打开帖子就贴两个广告 真烦人。。。 如何改变菜单的背景? 关于CString的问题 关于测试CPU实际频率的问题!急!!!在线等解答!
pEdit->SetFont( &m_pFont );m_pFont必须为事先创建好的类成员CFont *m_pFont
case WM_CTLCOLOREDIT :
hdcEdit = (HDC) wParam; // handle to display context
hwndEdit = (HWND) lParam; // handle to static control
SelectObject (hdcEdit,GetStockObject(SYSTEM_FIXED_FONT)) ;
SetTextColor (hdcEdit, RGB(0,0,255)) ;
SetBkColor (hdcEdit, RGB(0,0,255)) ;
return FALSE ;
结果,编辑框中文字字体是变了,但是字的颜色与编辑框的背景却没有发生变化!请问如何处理?
::SetBkMode(hdcEdit, TRANSPARENT);
(1)虽然我改变了编辑框中的字体,但是编辑框本身的高度却不能自适应字体的高度。所以,编辑框中的字看不清下半身……
(2)虽然我通过这段代码改变了编辑框中的字体及背景颜色,但是此时对话框中是只有一个编辑框!如果是多个编辑框,那样我该如何区分它们呢?是取wParam的低字节吗?
2)你的WM_CTLCOLOREDIT处理中return NULL_BRUSH;(好象HOLLOW_BRUSH也可以)就可以改变色彩了
3)wParam是dc,而lParam是Edit控件的HWND,因此只要比较::GetDlgCtrlID((HWND)lParam)和你的资源ID就可以确定那个需要改色彩或者改不同的色彩了
#define WHITE_BRUSH 0
#define LTGRAY_BRUSH 1
#define NULL_BRUSH 5
#define HOLLOW_BRUSH NULL_BRUSH
很奇怪的是你返回FALSE,则表示使用WHITE_BRUSH,因此正常
但当你返回TRUE,应该表示使用了LTGRAY_BRUSH,你的控件应该使用LTGRAY_BRUSH作为背景色,不知道为何可以使用你设置的色彩
郁闷中......
(1)虽然我改变了编辑框中的字体,但是编辑框本身的高度却不能自适应字体的高度。所以,编辑框中的字看不清下半身……
(2)虽然我通过这段代码改变了编辑框中的字体及背景颜色,但是此时对话框中是只有一个编辑框!如果是多个编辑框,那样我该如何区分它们呢?是取wParam的低字节吗?
==================================================================================
这两个问题我还是没有解决呀!!!
第二个问题:
#define IDC_EDIT1 20001
#define IDC_EDIT3 20002
#define IDC_EDIT3 20003if( GetDlgCtrlID(hdcEdit) == IDC_EDIT1 )
{
SetTextColor (hdcEdit, RGB(0,255,255)) ;
SetBkColor (hdcEdit, RGB(255,0,255)) ; return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
else if( GetDlgCtrlID(hdcEdit) == IDC_EDIT1 )
{
SetTextColor (hdcEdit, RGB(255,0,255)) ;
SetBkColor (hdcEdit, RGB(0,255,255)) ; return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
else if( GetDlgCtrlID(hdcEdit) == IDC_EDIT1 )
{
SetTextColor (hdcEdit, RGB(0,0,0)) ;
SetBkColor (hdcEdit, RGB(0,0,255)) ; return (HBRUSH)::GetStockObject(NULL_BRUSH);
}return (HBRUSH)::GetStockObject(WHITE_BRUSH);
LRESULT CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HWND hEdit;
static HFONT hFont;
static HBRUSH hBrush;
HDC hdc;
switch(uMsg)
{
case WM_INITDIALOG:
hEdit=GetDlgItem(hWnd, IDC_EDIT1); // IDC_EDIT1=你的Edit Control的ID
hBrush=CreateSolidBrush(RGB(0, 0, 255)); //蓝色
//改变字体
hFont=CreateFont(,....,"FONTNAME");
SendMessage(hEdit, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE,0));
return TRUE;
case WM_CTLCOLOREDIT:
//设置前景色
if(IDC_EDIT1==GetWindowLong((HWND)lParam, GWL_ID))
{
hdc = (HDC) wParam;
SetTextColor(hdc, 0x00ffff); //黄色前景
return (LONG)hBrush;
}
return FALSE;
case WM_DESTROY:
DeleteObject(hFont);
DeleteObject(hBrush);
return 0;
default:
break;
}
}