有难度,SDK中设置Edit的字体颜色 本帖最后由 zhihuizhilv 于 2009-07-22 13:30:42 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不能使用MFC。SetFont是MFC专有,没有对应的API。 用这个呢??WM_CTLCOLOREDIT SendMessage(hWnd,WM_SETFONT, WPARAM)hFont,1); 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:[email protected]",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; } 这个试过,在CreateWindowEx成功之后,立刻使用它进行设置,但是没有效果。 刚写的代码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;} 这个消息通过HFONT设置字体的大小、字体等属性。不能设置颜色。10楼的方法可以。 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上绘图也不行,别说设置前景色背景色了 vc picture和richedit的图形处理问题 2D矢量图形显示开发包 请问大家这段程序是什么意思啊?谢谢大家了! 请问为什么用CreateFile打开COM10以上的端口时就出错?打开COM1--9都没有问题。谢谢 请问如何得到浏览器(IE和腾讯)中输入的网址? 帮帮我! 有人知道这个类怎么用吗? 大问题,救命! 刚开始学 Visual C++ 不知如何下手,应看什么样的书? 寻获得文件夹路径的通用对话框代码 帮帮用Hook 解决程序多开问题 在线求救:IOCP中WSARecv接收数据问题
不能使用MFC。SetFont是MFC专有,没有对应的API。
WM_CTLCOLOREDIT
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:[email protected]",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;
}
这个试过,在CreateWindowEx成功之后,立刻使用它进行设置,但是没有效果。
{ 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;
}
这个消息通过HFONT设置字体的大小、字体等属性。不能设置颜色。10楼的方法可以。
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上绘图也不行,别说设置前景色背景色了