windows API -- WinMain,WndProc,Msg, CreateWindow ......

Dev-C++中使用Win32 API创建第一个GUI程序:从零实现祝福窗口 图形用户界面(GUI)编程是现代软件开发的基础,其核心原理是事件驱动模型。通过理解窗口、消息循环和控件等基本概念,开发者可以掌握程序与用户交互的本质。在Windows平台,Win32 API提供了最底层的GUI编程接口,虽然学习曲线较陡,但能帮助开发者深入理解操作系统与应用程序的交互机制,为后续学习MFC、Qt等高级框架打下坚实基础。本文以Dev-C++为开发环境,通过一个简单的祝福程序示例,详细讲解如何使用Win32 API创建窗口、添加控件、处理消息,并重点解析了链接器参数配置、消息循环机制等关键实践问 阅读详情
  1. windows 窗口结构体 原型,10个字段    
  2. typedef struct _WNDCLASS {     
  3.     UINT       style;     
  4.     WNDPROC    lpfnWndProc;     
  5.     int        cbClsExtra;     
  6.     int        cbWndExtra;     
  7.     HINSTANCE  hInstance;     
  8.     HICON      hIcon;     
  9.     HCURSOR    hCursor;     
  10.     HBRUSH     hbrBackground;     
  11.     LPCTSTR    lpszMenuName;     
  12.     LPCTSTR    lpszClassName;     
  13. } WNDCLASS, *PWNDCLASS;     
  14.     
  15.     
  16. BOOL GetMessage(    
  17.   LPMSG lpMsg,         // message information    
  18.   HWND hWnd,           // handle to window    
  19.   UINT wMsgFilterMin,  // first message    
  20.   UINT wMsgFilterMax   // last message    
  21. );    

这10个字段中最重要的是第二个 lpfnWnProc和倒数第一个lpszClassName;

一般用法如下:

WNDCLASS  wc={0}; // 先都搞成0再说

wc.lpfnWndProc = WndProc;

wc.lpszClassName = L"mywindows";


[cpp]  view plain copy
  1. //原型  
  2. HWND CreateWindow(   
  3. LPCTSTR lpClassName,   
  4. LPCTSTR lpWindowName,   
  5. DWORD dwStyle,   
  6. int x,   
  7. int y,   
  8. int nWidth,   
  9. int nHeight,   
  10. HWND hWndParent,   
  11. HMENU hMenu,   
  12. HANDLE hInstance,   
  13. PVOID lpParam );   


一般用法:

[cpp]  view plain copy
  1. hwnd = CreateWindowW( wc.lpszClassName, // 窗口名称  
  2.                  L"Window的标题",  
  3.                          WS_OVERLAPPEDWINDOW | WS_VISIBLE,  
  4.                               100, //左上角x  
  5.         100, //......y  
  6.                 350, //宽  
  7.                 250, //高   
  8.                 NULL, // 父窗口句柄,没有则用NULL  
  9.                 NULL, // 菜单  
  10.                 hInstance, //本窗口句柄  
  11.                 NULL);    


或者:


[cpp]  view plain copy
  1. hwnd = CreateWindow (szAppName, TEXT ("Random Rectangles"),  
  2.                           WS_OVERLAPPEDWINDOW,  
  3.                           CW_USEDEFAULT, CW_USEDEFAULT,  
  4.                           CW_USEDEFAULT, CW_USEDEFAULT,  
  5.                           NULL, NULL, hInstance, NULL) ;  
  6.        




[cpp]  view plain copy
  1.   
[cpp]  view plain copy
  1. #include <windows.h>  
  2.   
  3. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);  
  4. LRESULT CALLBACK PanelProc(HWND, UINT, WPARAM, LPARAM);  
  5.   
  6. void RegisterRedPanelClass(void);  
  7. void RegisterBluePanelClass(void);  
  8.   
  9. int WINAPI wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,int nShowCmd)  
  10. {  
  11.   
  12.         MSG msg;  
  13.         WNDCLASSW ws ={0};  // ws 共有10个字段.... 填充结构体为0先....然后下面把需要特别赋值的一一赋值.  
  14.         ws.lpszClassName = L"mycolorwindows";  
  15.         ws.hInstance = hInstance;  
  16.         ws.hbrBackground = GetSysColorBrush(COLOR_3DFACE);  
  17.         ws.lpfnWndProc = WndProc;  
  18.         ws.hCursor = LoadCursor(0,IDC_HAND);//第一个参数为NULL 0,表示用windows自带的ICON,那么第二个参数用自带光标.一般是箭头IDC_ARROW  
  19.       
  20.         // 窗口结构体ws 填充后,注册窗口  
  21.       RegisterClassW(&ws);  
  22.             
  23.         // 然后创建窗口  
  24.         HWND hwnd;  
  25.         hwnd =   CreateWindowW(ws.lpszClassName,L" color windows ",  
  26.                                         WS_OVERLAPPEDWINDOW|WS_VISIBLE,  
  27.                                         100,100,250,180,  
  28.                                         NULL,  
  29.                             0,  
  30.                             hInstance,  
  31.                                     0);  
  32.   
  33.     // 消息循环  
  34.         while(GetMessage(&msg,NULL,0,0)){ // 获取消息,保存到msg结构体中  
  35.            TranslateMessage(&msg); //翻译键盘消息  
  36.                    DispatchMessage(&msg);  //派发消息  
  37.                           
  38.         }  
  39.   
  40.                 return (int)msg.wParam; //?? msg结构没有wParam这个成员函数,wParam是怎么来的  
  41.   
  42. }  
  43.   
  44.   
  45. LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)  
  46. {      
  47.   switch(msg)    
  48.   {  
  49.     case WM_CREATE:  
  50.   
  51.       RegisterRedPanelClass();  
  52.   
  53.       CreateWindowW(L"RedPanelClass", NULL,   
  54.         WS_CHILD | WS_VISIBLE,  
  55.         20, 20, 80, 80,  
  56.         hwnd, (HMENU) 1, NULL, NULL);  
  57.   
  58.       RegisterBluePanelClass();  
  59.   
  60.       CreateWindowW(L"BluePanelClass", NULL,   
  61.         WS_CHILD | WS_VISIBLE,  
  62.         120, 20, 80, 80,  // 120 = 20 +80 + 20   
  63.         hwnd, (HMENU) 2, NULL, NULL);  
  64.   
  65.     break;  
  66.   
  67.     case WM_DESTROY:  
  68.       
  69.       PostQuitMessage(0);  
  70.       return 0;   
  71.   }  
  72.   
  73.   return DefWindowProcW(hwnd, msg, wParam, lParam);  
  74. }  
  75.   
  76.   
  77.   
  78. LRESULT CALLBACK PanelProc( HWND hwnd, UINT msg,   
  79.     WPARAM wParam, LPARAM lParam )  
  80. {  
  81.   switch(msg)    
  82.   {  
  83.     case WM_LBUTTONUP:  
  84.       
  85.       Beep(50, 40);  
  86.       break;      
  87.   }  
  88.   
  89.   return DefWindowProcW(hwnd, msg, wParam, lParam);  
  90. }  
  91.   
  92. void RegisterRedPanelClass(void)   
  93. {  
  94.   HBRUSH hbrush = CreateSolidBrush(RGB(255, 0, 0));  
  95.   
  96.   WNDCLASSW rwc = {0};  
  97.   rwc.lpszClassName = L"RedPanelClass";  
  98.   rwc.hbrBackground = hbrush;  
  99.   rwc.lpfnWndProc   = PanelProc;  
  100.   rwc.hCursor       = LoadCursor(0, IDC_ARROW);  
  101.   RegisterClassW(&rwc);   
  102. }  
  103.   
  104. void RegisterBluePanelClass(void)   
  105. {  
  106.   HBRUSH hbrush = CreateSolidBrush(RGB(0, 0, 255));  
  107.   
  108.   WNDCLASSW rwc = {0};  
  109.   rwc.lpszClassName = L"BluePanelClass";  
  110.   rwc.hbrBackground = hbrush;  
  111.   rwc.lpfnWndProc   = PanelProc;  
  112.   rwc.hCursor       = LoadCursor(0, IDC_ARROW);  
  113.   
  114.   RegisterClassW(&rwc);  
  115. }  
Windows编程 - Windows编程基础 HWND hChild1 = CreateWindowEx(0, __TEXT("Child"), __TEXT("子窗口1"), WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, 100, 200, 200, 200, hWnd, NULL, hIns, NULL);//WS_MINIMIZE //窗口最初为最小化状态。//WS_MAXIMIZE //窗口最初为最大化状态。 阅读详情

相关推荐

sysbench安装(在线&离线)

sysbench下载、安装、编译和异常处理方法

m0_61066945的博客 8756

win32窗口问题-CreateWindow创建窗口一直失败

win32窗口问题-CreateWindow创建窗口一直失败(新手)

D_daytime的博客 2036

基于STM32的宠物智能照护嵌入式系统设计

嵌入式系统是实现物联网终端设备本地化感知、决策与执行的核心技术载体,其关键在于多传感器融合、低功耗执行控制与轻量级云边协同。本文围绕环境监测(温湿度、烟雾、余粮)、机电执行(步进电机食盘、继电器风扇)和可靠通信(MQTT+ESP8266)三大技术主线,深入解析STM32F103在资源约束下的外设调度策略、ADC采样抗干扰设计、DHT11时序精准控制及HX711称重滤波算法等工程实践要点。系统强调本地闭环优先原则,确保离线基础功能可用,同时通过阿里云IoT平台实现远程监控与告警联动,为中小型智能硬件项目提供可

weixin_29155599的博客 294

MSG结构体和WndProc窗口过程详解

MSG结构体和WndProc窗口过程对于Windows编程非常重要,如果不了解它们,可以说就没有学会Windows编程。 MSG结构体 MSG 结构体用来表示一条消息,各个字段的含义如下: typedef struct tagMSG{ HWND hwnd; //窗口句柄 UINT message; //消息类型 WPARAM wParam; //附加消息1

芝麻软件工作室的专栏 3457

ollama接入图像识别大模型

ollama接入图像识别大模型

qq_36437991的博客 2075

生产实习-实习报告-Raspberry Pi的应用

生产实习-Raspberry Pi的应用 一.设计任务: 1、搭建树莓派开发环境 主要包括烧录树莓派操作系统,远程访问树莓派,树莓派接口配置以及树莓派与windows实现文件共享等。 2、树莓派的基本操作 控制GPIO点亮LED灯以及树莓派舵机云台控制 3、安装OpenCV及图像采集实验 OpenCV配合树莓派,直接读取来自树莓派摄像头Pi Camera的视频,进行人脸识别、边缘检测、颜色判别等各种计算机视觉开发。 4、树莓派小车远程Wi-Fi控制 使用树莓派驱动L298N,用树莓派板载Wi-Fi控制

青竹小轩的博客 750

_WinAPI创建窗口大致格式(笔记)

一、流程 1定义入口函数WinMain() 2创建一个窗口: a)设计窗口类WNDCLASS(给成员变量赋值) b)注册窗口类 c)创建窗口类 d)显示和更新窗口 3消息循环 4窗口过程函数 二、WinMain() //WINAPI:修饰函数,规定函数参数入栈从右往左,函数调用完毕,自动清理堆栈 int WINAPI WinMain(HINSTANCE hInstance,//应用程序实例 HINSTANCE hPr...

weixin_46949627的博客 913

MSP430项目设计:2020年TI杯大学生电子设计竞赛 坡道行驶电动小车(C题)循迹小车(分享项目展示视频与源码)

文章目录题目要求一、硬件设计二、理论分析与计算三、电路与程序设计四、测试方案与测试结果五、项目展示 哔哩哔哩项目展示视频:https://www.bilibili.com/video/BV1oz4y1d7mH/ 百度网盘资料链接:https://pan.baidu.com/s/1PC-lkSORH_XCgIG-u3HCog 提取码:c7zz 取走记得点赞啊! 题目要求 1.任务 利用TI的MSP430/MSP432平台,设计制作一个四轮电动小车。要求小车能沿着指定路线在坡道上自动循迹骑线行驶。小车必须独立

mbs706的博客 4万+

Windows游戏编程学习第一篇笔记——Window窗口创建

WinMain函数原型: int WINAPI WinMain( _In_HINSTANCE hInstance, // 该程序当前运行的实例句柄 _In_HINSTANCE hPrevInstance, // 在Win32下该参数总是取NULL,只是需要在书写时表示出来 _In_LPSTR lpCmdLine, //当...

沈遇玄的博客 1065

Qt入门教程【基础控件篇】QLineEdit输入框

QLineEdit输入框

小鱼酱的博客 3262

系统架构设计(以飞控系统、航电系统、机电管理系统、电子电气架构为例)

系统架构涉及对系统的结构和行为进行高层次的描述。它包括系统的组成部分、这些部分之间的关系、与外部环境的交互方式,以及满足特定功能和非功能性需求的方法。系统架构定义了系统的总体设计蓝图,指导系统的开发、集成、部署和维护。系统架构设计的目的是通过合理的结构和设计原则,确保系统能够高效、稳定、安全地运行,满足当前和未来的需求,同时具备良好的维护性、扩展性和可持续性。良好的系统架构不仅能够提高系统的开发效率和运行性能,还能降低长期的维护和运营成本,支持系统的持续演进和技术更新。

qq_41854911的博客 3052

Windows Api 学习笔记 1——基础知识(上)

Windows Api 学习笔记 1——基础知识(上)

JCY的博客 2603

Windows 下 Claude Code Desktop 安装与使用全记录:从零到一的保姆级图文教程

本文主要介绍了Windows 下 Claude Code 安装全记录:从零到一的保姆级图文教程,希望能对学习使用 Claude Code 的同学们有所帮助。 文章目录 1. 背景 2. 安装Claude Code Desktop 3. 配置第三方API 4. 日常使用

weixin_43178406的博客 8万+

WINDOWS API程序设计入门

WINDOWS窗口创建1.学习目的2.参考书籍3.学习内容4.代码5.结果 1.学习目的 了解 windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动; 掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数; 2.参考书籍 《Windows程序设计教程》 3.学习内容 动手写第一个基于windows API 的基于窗体、消息循环、事件驱动的 Windows C语言风格的Windows 程序。 4.代码 #include <windows.h&g

bawei939的博客 1161

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++在VS2022开发Windows窗口程序2:API式的Windows窗口程序设计模式

然后是WndProc函数,由于我们暂时不需要处理什么特殊的窗口消息,因此WndProc函数里面只有一个窗口关闭消息处理功能,当窗口关闭时,自动结束窗口的程序进程。- `style`:窗口类的风格,可以指定一些特定的风格,比如 `CS_HREDRAW` 和 `CS_VREDRAW`,用于确定窗口大小改变时是否需要重绘等。WndProc函数,窗口过程函数,负责处理窗口接收到的消息,会处理窗口消息,比如绘制窗口内容、响应用户。- `lpfnWndProc`:指向窗口过程函数的指针,用于处理窗口接收到的消息。

LorraineWen的博客 1784

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

CreateWindow

// 包含头文件windows.h#include #include "tchar.h"// 预先声明Message Handler,可以叫做任何名字,这里是MyWindowProcedureLRESULT CALLBACK MyWindowProcedure(HWND, UINT, WPARAM, LPARAM);// 以下是所有Windows程序都需要的WinMain函数// WinM

OneOnce的专栏 1814

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

c语言程序创建窗口程序集,C\C++ Windows程序设计[2]:创建一个窗口

上篇文章讲了如何编写一个弹出对话框的程序,这篇文章就来讲讲如何在C\C++下创建一个窗口。来简单介绍下 Windows窗口程序 的创建过程:首先我们需要注册一个窗口类,可以使用RegisterClass函数,接着使用CreateWindow创建一个窗口。下一步需要让窗口在屏幕上面显示出来,可以使用ShowWindow来完成,接着是更新窗口,注意一定不能漏掉这个步骤!这个阔以使用UpdateWind...

weixin_39861054的博客 2879

Windows编程基础(API调用)

 本人已经博客移至:围观IT,更多精彩内容请访问:围观IT说明:MSG消息是一个结构体,参数:HWND:标示和哪个窗口相关(表示窗口)Unit(整形) message传递的消息,即用户在使用程序时所进行的相应操作:用相应的宏表示相应的操作。WPARAM(整形):关于消息的附加信息。当我们按键盘时的时候,其实传递给系统的是一个WM_CHAR消息。而不知道是哪个键,而这个附

学习中.... 655

Windows SDK程序的基本框架

#include //windows.h头文件包含了大多数windows API函数与数据结构的定义//声明窗口处理函数LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//WinMain函数负责创建窗体与建立消息循环:int WINAPI WinMain(HINSTANCE hInstance, //应用程序当前实例句柄 HINSTANC

刘智的专栏 1778

windows c++ 一个带界面的窗口程序(附带源码)

windows c++ 一个带界面的窗口程序(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1263

如何写一个基于Windows API简单窗口的程序

文章目录二、使用步骤1.引入库2.读入数据总结 # 问题描述 动手写第一个基于windows API 的基于窗体、消息循环、事件驱动的 Windows C语言风格的Windows 程序。 # 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt impor

Harriet的博客 1862

C++ windows api 最基本的窗口代码段(抄书)

#includewindows.h>//#include#includestdlib.h>//using namespace windows;LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);BOOL InitWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANCE hInstan

重典的博客 3273

记录下。winmain模板

#include //2012.9.11 硬是花了一下午 LRESULT CALLBACK WndProc(  HWND hwnd,       // handle to window  UINT uMsg,       // message identifier  WPARAM wParam,   // first message parameter  LPARAM lParam

tmsh113的专栏 464

Windows API编程(一)完整的示范程序

## #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//回调函数; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow) { WNDCLA...

weixin_34194551的博客 267

Windows游戏编程学习笔记

1.文件类型: ipch文件夹和.sdf文件:这两个文件都是Visual Studio用来保存预编译的头文件和Intellisense用的。(可删除,对于工程开发没有影响) Debug文件夹:存放着编译过程中的中间文件,以及最后的目标文件,.exe执行文件(如果是Release型,则不出现Debug文件夹而是Release文件夹) .vcxproj:项目文件 .sln:记录着关于解决方案中...

苏箬初的博客 474
上一篇: CWinApp
下一篇: WINDOWS API,CreateWindowW,WM_KEYDOWN,VK_ESCAPE, SendMessage(hwnd, WM_CLOSE, 0, 0)
sergery
博客等级 码龄18年 113粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值