利用windowsAPI创建窗口

/*
 * 说明:演示利用windowsAPI创建窗口的过程
 * 开发环境:Visual C++ 6.0
 * 时间:2008-9-19
 */

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);    // 窗口函数声明
char szClassName[] = "windowclass";  // 窗口结构体的名称
char szAppTitle[] = "API 创建窗口实例";

INT PASCAL WinMain(                  // WinMain函数定义
       HINSTANCE hInstance,           // 应用程序当前实例句柄
       HINSTANCE hPrevInstance,    // 应用程序其他实例句柄
       LPSTR lpszCmdParam,             // 指向程序命令行参数的指针
       INT nCmdShow)                        // 应用程序开始执行时窗口显示方式的整数值标识
{
 HWND hMainWnd;      // 窗口句柄
 MSG msg;                     // 消息结构体
 WNDCLASS winclass; // 窗口结构体

 if(!hPrevInstance)  // 判断是否已有应用程序的实例在运行,给窗口结构体的数据成员赋值来规定所要创建的窗口的特征
 {
  winclass.style = CS_HREDRAW | CS_VREDRAW;             // 窗口风格
  winclass.lpfnWndProc = WndProc;                                         // 窗口的处理函数
  winclass.cbClsExtra = 0;                                                          // 窗口类无扩展
  winclass.cbWndExtra = 0;                                                       // 窗口实例无扩展
  winclass.hInstance = hInstance;                                              // 当前应用程序的实例句柄
  winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);  // 窗口的最小化图标为缺省图标             
  winclass.hCursor = LoadCursor(NULL, IDC_ARROW);     // 窗口采用箭头光标             
  winclass.hbrBackground = GetStockObject(LTGRAY_BRUSH); // 窗口背景为浅灰
  winclass.lpszClassName = szClassName;        // 窗口结构体名称
  winclass.lpszMenuName = NULL;    // 无窗口菜单

  RegisterClass(&winclass);                  // 注册窗口
 }

 

 // 建立窗口,并返回所创建窗口的句柄
 hMainWnd = CreateWindow(
       szClassName,    // 窗口结构体名称
       szAppTitle,      // 窗口的标题
       WS_OVERLAPPEDWINDOW, // 可重叠窗口
       // 使用缺省值设置窗口左上角x,y坐标和窗口的宽度和高度
       CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
       NULL, NULL, hInstance, NULL);

 

 // 显示窗口
 ShowWindow(hMainWnd, SW_SHOWNORMAL);
 // 更新窗口
 UpdateWindow(hMainWnd);

 

 while(GetMessage(&msg, NULL, 0 , 0)) // 获取消息,填充MSG结构体
 {
  TranslateMessage(&msg); // 翻译键盘消息
  DispatchMessage(&msg);  // 向窗口程序发送消息,让窗口程序处理
 }
 return msg.wParam;
}

LRESULT CALLBACK WndProc(
       HWND hMainWnd,
       UINT message,
       WPARAM wParam,
       LPARAM lParam)    // 窗口函数定义
{
 HDC hdc;                   // 设备描述表
 PAINTSTRUCT ps; // 刷新区域
 RECT rect;                // 矩形结构
 char messageLeft[] = "press mouse left button.";
 char messageRight[] = "press mouse right button.";

 switch(message)   // 判断消息标志符
 {
 case WM_PAINT:    // 窗口重绘
  {
   hdc = BeginPaint(hMainWnd, &ps);
   GetClientRect(hMainWnd, &rect);
   DrawText(hdc, TEXT("Using windowsAPI to creating windows application."), -1, &rect,
      DT_SINGLELINE| DT_CENTER);
   EndPaint(hMainWnd, &ps);
   break;
  }
 case WM_RBUTTONDOWN: // 鼠标右键按下
  {
   MessageBox(GetFocus(), messageRight, API instance.", MB_OK|MB_ICONASTERISK);
   break;
  }
 case WM_LBUTTONDOWN: // 鼠标左键按下
  {
   MessageBox(GetFocus(), messageLeft, API instance.", MB_OK|MB_ICONASTERISK);
   break;
  }
 case WM_DESTROY: // 销毁窗口
  {
   PostQuitMessage(0);
   return 0;
  }
 default:
  break;
 }
 return DefWindowProc(hMainWnd, message, wParam, lParam);  // 其他消息交给DefWindowProc处理
}

很抱歉,作为一个AI语言模型,我并不能实际编写代码,但是,我可以为你提供一个基本的窗口程序的框架,供您参考: ```c #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //注册窗口类 WNDCLASS wc = {0}; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.lpszClassName = L"MyWindowClass"; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.hCursor = LoadCursor(NULL, IDC_ARROW); RegisterClass(&wc); //创建窗口 HWND hwnd = CreateWindow( L"MyWindowClass", L"My Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 500, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); //消息循环 MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); TextOut(hdc, 5, 5, L"Hello, World!", 13); EndPaint(hwnd, &ps); break; } case WM_CLOSE: { DestroyWindow(hwnd); break; } case WM_DESTROY: { PostQuitMessage(0); break; } default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } ``` 这个程序定义了一个名为“My Window”的窗口,并在该窗口中显示“Hello, World!”的消息。你可以根据你的需求修改和扩展这个程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值