API窗口示例程序不显示字符串,空白窗口

img

img


#include<windows.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口函数说明//-----------------以下初始化窗口类----------------------------int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdshow) //WinMain函数说明{ HWND hwnd; MSG Msg; WNDCLASS wndclass; static WCHAR lpszClassName[] = (L"窗口示例"); //窗口类名 static WCHAR lpszTitle[] = (L"窗口示例程序"); //窗口标题名 //-----------------窗口类的定义------------------------------ wndclass.style = 0; //窗口类型为默认类型 wndclass.lpfnWndProc = WndProc; //窗口处理函数名为WndProc wndclass.cbClsExtra = 0; //窗口类无扩展 wndclass.cbWndExtra = 0; //窗口实例无扩展 wndclass.hInstance = hInstance; //当前实例句柄 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //使用用默认图标 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //窗口采用箭头光标 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//窗口背景为白色 wndclass.lpszMenuName = NULL; //窗口中无菜单 wndclass.lpszClassName = lpszClassName; //窗口类名为“窗口示例” //-------------以下进行窗口类的注册------------------------ if (!RegisterClass(&wndclass)) //若注册失败则发出警告声音 { MessageBeep(0); return FALSE; } //-------------创建窗口实例操作--------------------- hwnd = CreateWindow(lpszClassName, //窗口类名 lpszTitle, //窗口实例的标题名 WS_OVERLAPPEDWINDOW, //窗口的风格 CW_USEDEFAULT, CW_USEDEFAULT, //窗口左上角坐标为默认值 CW_USEDEFAULT, CW_USEDEFAULT, //窗口的高和宽为默认值 NULL, //此窗口无父窗口 NULL, //此窗口无主菜单 hInstance, //应用程序的当前句柄 NULL); //不使用该项 //-------------显示窗口--------------------- ShowWindow(hwnd, nCmdshow); //显示窗口 UpdateWindow(hwnd); //绘制用户区 //-------------消息循环--------------------- while (GetMessage(&Msg, NULL, 0, 0)) //消息循环 { TranslateMessage(&Msg);//转换某些键盘消息 DispatchMessage(&Msg);//将消息发送给窗口过程(函数) } return Msg.wParam; //程序终止时将信息返回系统}//-------------窗口函数---------------------LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ RECT rect; HDC hdc; PAINTSTRUCT ps; static int uRed = 0, uGreen = 0, uBlue = 0; LPCTSTR str = (L"这是一个基于API的Windows应用程序!"); switch (message) { case WM_PAINT: LOGFONT LogFont; HFONT hfont1, oldfont; // hdc = BeginPaint(hwnd, &ps); //开始在窗口用户区绘制 // GetClientRect(hwnd, &rect); //获取窗口用户区的尺寸 //SetTextColor(hdc, RGB(uRed, uGreen, uBlue));//设置文本颜色 // DrawText(hdc, str, -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); // EndPaint(hwnd, &ps); //结束绘制 // break; hdc = BeginPaint(hwnd, &ps); SetTextColor(hdc, RGB(uRed, uGreen, uBlue)); memset(&LogFont, 0, sizeof(LOGFONT)); //内存分配 LogFont.lfHeight = 55; LogFont.lfWidth = 30; LogFont.lfUnderline = 0; LogFont.lfItalic = 0; LogFont.lfCharSet = GB2312_CHARSET; lstrcpy(LogFont.lfFaceName, L"隶书"); //对变量LogFont进行初始化 hfont1 = CreateFontIndirect(&LogFont); //创建新字体 oldfont = (HFONT)SelectObject(hdc, hfont1); //选入新字体,返回旧字体指针 TextOut(hdc, 20, 50, str, 22); //用新字体显示 SelectObject(hdc, oldfont); //重新选入旧字体 DeleteObject(hfont1); //删除新字体 EndPaint(hwnd, &ps); break; case WM_KEYDOWN: uRed = rand() % 255; uGreen = rand() % 255; uBlue = rand() % 255; InvalidateRect(hwnd, NULL, TRUE);//强制刷新指定区域 break; case WM_DESTROY: PostQuitMessage(0); //调用该函数发出WM_QUIT消息 default: //默认消息处理函数 return DefWindowProc(hwnd, message, wParam, lParam); } return(0);}