本文共 3457 字,大约阅读时间需要 11 分钟。
昨晚在另外一篇文章中找到了修改直接给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 0x01TCHAR 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);}
效果如下:
转载地址:http://opini.baihongyu.com/