昨晚在另外一篇文章中找到了修改直接给HDC中输出文字的办法了,但是控件的字体一直没法修改,今天搞了一天晚上还是问的以前的同事才搞定。原来发送个消息都好了。直接的源代码看这个把 #include <windows.h> #include <stdlib.h> #include <stdio.h> #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); } 效果如下: