有难度,SDK中设置Edit的字体颜色

zhihuizhilv 2009-07-22 01:28:27
如题。
如果在MFC中,能够使用WM_CRLCOLOR,但是SDK中没有定义这个消息。以我的理解,MFC中能够实现的,SDK中也一定能够实现。但这个WM_CTLCOLOR让我困惑。
另外使用RichEdit是可以的。但是我看Windows自带的画图程序中,添加文字时的那个编辑窗口是Edit,且能够实现改变字体颜色。不知它是怎么实现的。
还请大家多多发言,集思广益。

...全文
567 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeiying 2009-08-06
  • 打赏
  • 举报
回复
hEdit = CreateWindow (TEXT ("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER , 0 , 0 , 710 , 40 , hWnd, (HMENU)IDC_EDIT1 , ((LPCREATESTRUCT) lParam) -> hInstance , NULL);
DhEdit=GetDlgItem(hWnd, IDC_EDIT1);

hFont = CreateFontA(40 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , GB2312_CHARSET , OUT_DEFAULT_PRECIS , CLIP_DEFAULT_PRECIS , ANTIALIASED_QUALITY , FIXED_PITCH , "黑体");

hdc = GetDC(DhEdit);

SetTextColor(hdc,RGB(255,0,255));

SetBkColor(hdc,RGB(0,0,0));

这怎么不行呀,我已经取得EDIT的DC,在DC上绘图也不行,别说设置前景色背景色了
yeiying 2009-08-06
  • 打赏
  • 举报
回复
告诉我怎么弄的呀,我现在也需要这个,楼主给我个完整的吧
zhihuizhilv 2009-07-23
  • 打赏
  • 举报
回复
结贴了,谢谢各位。
zhihuizhilv 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lonelyhacker 的回复:]
SendMessage(hWnd,WM_SETFONT, WPARAM)hFont,1);
[/Quote]

这个消息通过HFONT设置字体的大小、字体等属性。不能设置颜色。

10楼的方法可以。
Ghost90 2009-07-22
  • 打赏
  • 举报
回复
刚写的代码

BOOL CALLBACK WndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam, LPARAM lParam)
{

if(WM_CLOSE==uMsg)
{
EndDialog(hwndDlg,0);
}
else if(WM_CTLCOLOREDIT==uMsg)
{
HWND hEdit=GetDlgItem(hwndDlg,IDC_EDIT1);
HDC hEditDC=(HDC)wParam;
COLORREF cf=RGB(255,0,0);
cf=SetTextColor(hEditDC,RGB(255,0,0));
SetBkColor (hEditDC,RGB(0,0,255)) ;
return (LONG)hBrush;
}
else if(WM_INITDIALOG==uMsg)
{
hBrush=CreateSolidBrush(RGB(0,0,255));
}
return 0;
}
zhihuizhilv 2009-07-22
  • 打赏
  • 举报
回复
我的问题能够解决了。
等明天再结贴。好让大家说出自己的方法。
请大家继续发言。
zhihuizhilv 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ghost90 的回复:]
用这个呢??
WM_CTLCOLOREDIT
[/Quote]

惊喜。这个可以。在父窗口的窗口过程中能够收到这个消息。而且设置字体颜色有效。
zhihuizhilv 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liujin1234 的回复:]
settextcolor
[/Quote]

这个试过,在CreateWindowEx成功之后,立刻使用它进行设置,但是没有效果。
oyljerry 2009-07-22
  • 打赏
  • 举报
回复
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{

static HWND hwndCtrl;
static RECT rect;
static POINT pt;
static int iEmail=0;
//HDC hdc;
// PAINTSTRUCT ps ;
switch (message)
{
case WM_INITDIALOG:
hwndCtrl=GetDlgItem(hDlg,IDC_STATIC1); //获取静态文本框的句柄
return TRUE ;
case WM_LBUTTONDOWN:
if(iEmail)//若鼠标指针在静态文本框内
ShellExecute(hDlg,NULL,"mailto:xiaott@sd163.net",0,0,0);
EndDialog (hDlg, 0) ;
return TRUE ;
case WM_CTLCOLORSTATIC ://无法实现文本变色
if(iEmail)
SetTextColor((HDC)wParam,RGB(255,0,0));
else SetTextColor((HDC)wParam,RGB(0,0,0));
return TRUE;
case WM_MOUSEMOVE://可以实现鼠标命中测试
GetClientRect(hwndCtrl,&rect);
GetCursorPos(&pt);
ScreenToClient(hwndCtrl,&pt);

if(PtInRect(&rect,pt))//若鼠标指针在静态文本框内
{SetCursor(LoadCursor(NULL,IDC_HAND));//设置鼠标指针为手形
iEmail=1;
}
else
{SetCursor(LoadCursor(NULL,IDC_ARROW));//指针恢复正常
iEmail=0;
}
return TRUE;
}
return 0;
}
lonelyhacker 2009-07-22
  • 打赏
  • 举报
回复
SendMessage(hWnd,WM_SETFONT, WPARAM)hFont,1);
Ghost90 2009-07-22
  • 打赏
  • 举报
回复
用这个呢??
WM_CTLCOLOREDIT
liujin1234 2009-07-22
  • 打赏
  • 举报
回复
settextcolor
zhihuizhilv 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liujin1234 的回复:]
setfont
[/Quote]

不能使用MFC。SetFont是MFC专有,没有对应的API。
liujin1234 2009-07-22
  • 打赏
  • 举报
回复
setfont

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧