一个SDK问题

Jinhao 2003-07-27 07:18:13
如何用SDK来改变某个已知hwnd的Button的字体和字体颜色。
希望能有Code
...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tryber 2003-09-13
  • 打赏
  • 举报
回复
用BS_OWNERDRAW风格Create,处理WM_DRAWITEM消息,code:
用app wizard生成一win32 application,
下面是我的InitInstance和WndProc

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}
///hwndbtn is global hwnd define before
hwndbtn=CreateWindow(_T("BUTTON"),_T("ownerdraw"),
WS_CHILD|WS_VISIBLE|WS_BORDER|BS_OWNERDRAW,10,10,90,30,hWnd,NULL,NULL,NULL);
if(hwndbtn==NULL)
return FALSE;

CreateWindow(_T("BUTTON"),_T("THISISADEFAULTBTN"),
WS_CHILD|WS_VISIBLE|WS_BORDER,100,100,150,30,hWnd,NULL,NULL,NULL);

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}

//
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

DRAWITEMSTRUCT* pds;
TCHAR btntext[20];
COLORREF oldtextclr;
RECT btnrc;
HFONT hf;
HFONT oldhf=NULL;
switch (message)
{
case WM_DRAWITEM:
pds=(DRAWITEMSTRUCT*)lParam;
if((pds->hwndItem ==hwndbtn)&&(pds->CtlType ==ODT_BUTTON))
{
GetWindowText(hwndbtn,btntext,20);
oldtextclr=::GetTextColor(pds->hDC);
::SetTextColor(pds->hDC,RGB(255,0,0));
GetClientRect(hwndbtn,&btnrc);
int fonthi=-MulDiv(8,GetDeviceCaps(
pds->hDC,LOGPIXELSY),72);
hf=CreateFont(fonthi,0,0,0,0,0,0,0,0,0,0,0,0,
_T("宋体"));
if(hf!=NULL)
oldhf=(HFONT)SelectObject(pds->hDC,(HGDIOBJ)hf);
DrawText(pds->hDC,btntext,
_tcslen(btntext),&btnrc,DT_CENTER);
SetTextColor(pds->hDC,oldtextclr);
if(oldhf!=NULL)
SelectObject(pds->hDC,(HGDIOBJ)oldhf);
if(hf!=NULL)
DeleteObject((HGDIOBJ)hf);
}
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;

default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
cloudtarget 2003-09-12
  • 打赏
  • 举报
回复
up
Jinhao 2003-07-27
  • 打赏
  • 举报
回复
可以
铖邑 2003-07-27
  • 打赏
  • 举报
回复
可不可以发消息?

15,976

社区成员

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

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