昨晚在另外一篇文章中找到了修改直接给HDC中输出文字的办法了,但是控件的字体一直没法修改,今天搞了一天晚上还是问的以前的同事才搞定。原来发送个消息都好了。直接的源代码看这个把
#define BUFFER_SIZE 100
#define TITLE_WARN "警告"
#define TITLE_INFO "提示"
#define HB_SEND_SOCKET_ID 0x01
TCHAR wzClassName[BUFFER_SIZE] = TEXT("myWndClass");
TCHAR wzWindowName[BUFFER_SIZE] = TEXT("DysNET监控中心");
// 主类声明
WNDCLASS wndclass;
// 按钮控件
HWND hbSendSocket;
// 全局的字体
HFONT hfont;
// 初始化窗体
void WINAPI InitWndClass(HINSTANCE hInstance);
// 主回调函数
LRESULT CALLBACK MyWindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
// 创建组件
void CreateComponent(HWND hwnd, LPARAM lParam);
// 初始化字体
void InitSysFont(void);
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
// 窗口句柄
HWND hwnd;
// 消息体
MSG msg;
InitSysFont();
InitWndClass(hInstance);
RegisterClass(&wndclass);
hwnd = CreateWindow(wzClassName, wzWindowName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, SW_SHOWDEFAULT);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0) != 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
//
// 初始化WNDCLASS类
void WINAPI InitWndClass(HINSTANCE hInstance)
{
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = MyWindowProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(ANSI_FIXED_FONT);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = wzClassName;
}
//
// 主回调函数
LRESULT CALLBACK MyWindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
HDC hdc;
PAINTSTRUCT ps;
switch(uMsg)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
SelectObject(hdc, hfont);
TextOut(hdc, 20, 70, TEXT("中华人民共和国"), lstrlen(TEXT("中华人民共和国")));
EndPaint(hwnd, &ps);
break;
case WM_CREATE:
hbSendSocket = CreateWindow(TEXT("button"), TEXT("测试"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 20, 20, 40, 20, hwnd, (HMENU)HB_SEND_SOCKET_ID, ((LPCREATESTRUCT)lParam) -> hInstance, NULL);
SendMessage(hbSendSocket, WM_SETFONT,(WPARAM)hfont, TRUE);
break;
case WM_COMMAND:
if(LOWORD(wParam) == HB_SEND_SOCKET_ID)
{
MessageBox(hwnd, TEXT("按钮被按下"), TEXT(TITLE_INFO), MB_OK);
}
break;
case WM_CLOSE:
if(IDYES == MessageBox(hwnd, TEXT("确定关闭?"), TEXT(TITLE_WARN), MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
//
// 创建组件
void CreateComponent(HWND hwnd, LPARAM lParam)
{
hbSendSocket = CreateWindow(TEXT("button"), NULL, WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 20, 20, 40, 20, hwnd, (HMENU)HB_SEND_SOCKET_ID, ((LPCREATESTRUCT)lParam) -> hInstance, NULL);
}
//
// 初始化字体
void InitSysFont(void)
{
LOGFONT font;
memset(&font, 0, sizeof(font));
font.lfHeight = 12;
//font.lfWeight = FW_NORMAL;
//font.lfCharSet = DEFAULT_CHARSET;//GB2312_CHARSET;
//font.lfQuality = DEFAULT_QUALITY;
lstrcpy(font.lfFaceName, TEXT("宋体"));
hfont = CreateFontIndirect(&font);
}
效果如下: