Text01 源代码

本文展示了一个使用Windows API创建窗口并绘制系统信息的简单示例。通过注册窗口类、创建窗口实例、处理消息循环来实现基本的GUI应用程序。特别介绍了如何在窗口中绘制文字并显示系统度量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  #include <windows.h>
#include <tchar.h>
#include "sysmets.h"


LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow)
{
 static TCHAR szAppName[] = TEXT("Text test");
 HWND  hwnd  = NULL;
 MSG  msg  = {0};
 WNDCLASS wndclass = {0};

 //init wndclass
 wndclass.cbClsExtra = 0;
 wndclass.cbWndExtra = 0;
 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
 wndclass.hIcon  = LoadIcon(NULL, IDI_APPLICATION);
 wndclass.hInstance = hInstance;
 wndclass.lpfnWndProc = WndProc;
 wndclass.lpszClassName = szAppName;
 wndclass.lpszMenuName = NULL;
 wndclass.style  = CS_HREDRAW | CS_VREDRAW;
 
 //Register class
 if (!RegisterClass(&wndclass))
 {
  MessageBox(NULL, TEXT("This program require WinNT"),szAppName, MB_ICONERROR);

  return 0;
 }

 hwnd = CreateWindow(szAppName, TEXT("Test for Text 01"), 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 (int)msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 static int cxChar = 0;
 static int cxCaps = 0;
 static int cyChar = 0;

 HDC  hdc = NULL;
 PAINTSTRUCT ps = {0};
 TEXTMETRIC tm = {0};

 TCHAR  szBuffer[10] = "/0";

 int  i  = 0;

 switch (message)
 {
  case WM_CREATE:
  {
                        hdc = GetDC(hwnd);

   GetTextMetrics(hdc, &tm);
   cxChar = tm.tmAveCharWidth;
   cyChar = tm.tmHeight + tm.tmExternalLeading;
   cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;

   ReleaseDC(hwnd, hdc);
  }
  return 0;

  case WM_PAINT:
  {
   hdc = BeginPaint(hwnd, &ps);

   for (i = 0; i < NUMLINES; i++)
   {
    TextOut(hdc, 0, cyChar * i, sysmetrics[i].szLabel, lstrlen(sysmetrics[i].szLabel));
    TextOut(hdc, 22 * cxCaps, cyChar * i, sysmetrics[i].szDesc, lstrlen(sysmetrics[i].szDesc));

    SetTextAlign(hdc, TA_RIGHT | TA_TOP);
    TextOut(hdc, 22 * cxCaps + 40 * cxChar, cyChar * i, szBuffer, wsprintf(szBuffer, TEXT("%5d"), GetSystemMetrics(sysmetrics[i].iIndex)));

    SetTextAlign(hdc, TA_LEFT | TA_TOP);
   }
  }
  return 0;

  case WM_DESTROY:
  {
   PostQuitMessage(0);
  }

  return 0;
 }
       
 return DefWindowProc(hwnd, message, wParam, lParam);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值