Windows编程___创建窗口
创建Windows窗口不难,可以简要的概括为:
1,# 注册一个窗口类
填充WNDCLASS结构
书写窗口消息处理函数WinProc
2,# 创建一个窗口
填写基本的窗口信息
3,# 显示窗口
4,# 循环处理窗口信息
相关函数:
注册窗口类(重点是填充WNDCLASS结构)
ATOM RegisterClass (CONST WNDCLASS *lpWndClass)
WNDCLASS结构
// 也不很清楚,就值知道几个重要的,其他的照葫芦画瓢写的.
Wnd.cbClsExtra = NULL;
Wnd.cbWndExtra = NULL;
Wnd.hbrBackground = (HBRUSH)COLOR_WINDOW;
Wnd.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE(IDC_ARROW));
Wnd.hIcon = NULL;
Wnd.hInstance = hInstance;
Wnd.lpszClassName = sz_ClassName; //类名
Wnd.lpszMenuName = NULL; //菜单
Wnd.style = CS_HREDRAW | CS_VREDRAW; //类的类型 CS_type
Wnd.lpfnWndProc = WndProc; //窗口处理函数
创建窗口
HWND CreateWindow( LPCTSTR lpClassName, //基于那个类的窗口
LPCTSTR lpWindowName, //窗口标题
DWORD dwStyle, //窗口风格 WS_***
int x, //左上角
int y, //右上角
int nWidth, //宽
int nHeight, //高
HWND hWndParent, //父窗口句柄
HMENU hMenu, //菜单句柄,注意,如果是"BOTTON"类的窗口,那么此参数为按钮ID,与处理消息有关
HINSTANCE hInstance, //窗口实例,我不是很清楚干嘛的,不过WinMain函数参数,就有一个hInstance
LPVOID lpParam //不是很清楚,貌似是窗口创造前要发送的消息(发送窗口处理函数)WM_CREATE 消息
);
//窗口创造就会给处理函数发送一个WM_CREATE消息
//如果我们不需要处理的消息可以交个DefWindowProc()函数处理,并返回.
窗口处理函数(需要自己写 然后交给windows取调用的. 在RgisterClass中传递给Windows)
//记得消息处理函数要有 CALLBACK 声明
LRESULT CALLBACK WndProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
//uMsg可以初步判断消息
//有的消息我们直接通过uMsg就可以直接获取,但是有些还需要结合wParam,lParam
switch(uMsg){
case WM_CREATE:
//窗口创造前执行.
break;
case WM_LBUTTONDOWN:
// 鼠标左键被点下
break;
case WM_PAINT:
hDc = BeginPaint(hWnd,&paint);
//绘画消息触发
EndPaint(hWnd,&paint);
break;
case WM_CLOSE: //标题框的关闭按钮被按下
PostQuitMessage(WM_QUIT);
break;
case WM_COMMAND:
if(LOWORD(wParam) == BOTTON_ID && HIWORD(wParam) == BN_CLICKED){
//按钮被按下
//LOWORD(wParam) 低位 HIWORD(wParam) 高位
}
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam); //我们不需要处理的消息都默认让系统帮我们处理
}
return ;
}
显示窗口
ShowWindow(hWND,nCmdShow); //hWND是CreateWindow返回的窗口句柄,nCmdShow是显示窗口的方式(可以直接用WinMain函数的最后一个参数nCmdShow)
UpdateWindow(hWND); //=一个WM_PAINT消息来刷新窗口
消息循环
//处理窗口消息
while(GetMessage(&Msg,NULL,,)){
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
// emmmm...直接Copy VS项目的代码的,还把一些删了,但是,貌似也没错.
Windows编程___创建窗口的更多相关文章
- Win32 SDK 编程开始, 创建窗口, 消息的处理, 消息循环
Windows SDK 编程的一般步骤为: 1. 注册窗口类, 使用到的结构 WNDCLASSEX, 函数 RegisterClassEx. 2. 创建窗口, 函数 CreateWindowEx. 3 ...
- Windows运行机理——创建窗口
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 Windows 窗口在创建之前,其属性必须设定好,所谓属性包括类的名字 ...
- 16 Windows编程——系统内置窗口子类型之edit、ComboBox、ownerbutton、listbox
edit类型的子窗口 ES_MULTILINE:多行输入文本框 窗口的消息: WL_COMMAND: EN_CHANGE:当edit窗口内的文本内容改变的时候,edit子窗口给父窗口发送一个WL_CO ...
- 学习windows编程 day3 之窗口绘画二:边框绘制函数
#include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM l ...
- 学习windows编程 day3 之窗口绘画一:点线绘制
#include <windows.h> #include <math.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, ...
- 13 Windows编程——系统内置窗口子类型之静态子窗口
静态子窗口类型 wndclass:static 源码 #include<Windows.h> #include<Windowsx.h> HINSTANCE G_h; LRESU ...
- 15 Windows编程——系统内置窗口子类型之button
button子类型BS_3STATE.BS_AUTO3STATE.BS_AUTOCHECKBOX 源码 #include<Windows.h> #include<Windowsx.h ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记1——创建窗口&GDI
第1章 创建窗口 步骤: 窗口类的设计 窗口类的注册 窗口的正式创建 窗口的显示与更新 消息循环体系 窗口过程函数处理消息 1. 设计:使用WNDCLASSEX结构体,这里注意的是C++中的结构体中的 ...
- 【Windows编程】系列第六篇:创建Toolbar与Statusbar
上一篇我们学习了解了如何使用Windows GDI画图,该应用程序都是光光的静态窗口,我们使用Windows应用程序,但凡稍微复杂一点的程序都会有工具栏和状态栏,工具栏主要用于一些快捷功能按钮.比如典 ...
随机推荐
- Ubuntu中的在文件中查找和替换命令
分类: 9.Linux技巧2009-09-29 13:40 1429人阅读 评论(0) 收藏 举报 ubuntujdbc 1.查找 find /home/guo/bin -name /*.txt | ...
- 转 Deep Learning for NLP 文章列举
原文链接:http://www.xperseverance.net/blogs/2013/07/2124/ 大部分文章来自: http://www.socher.org/ http://deepl ...
- 微信小程序web-view使用测试总结
1.后台配置业务域名. 2.在开发者工具的web-view组件中绑定业务域名. 3.点击开发者工具的详情按钮,选择调试基础库高版本,如果不设置,有可能绑定的业务域名内容不显示. 4.如果是公众号上的内 ...
- spark使用正则表达式读入多个文件
String dir = "s3a://example/";String currentDir = dir + "{1[5-9],2[01]}/*.txt";J ...
- Fiddler系列教程1:初识Http协议抓包工具
1. Fiddler简介 Fiddler是用一款使用C#编写的http协议调试代理工具.它支持众多的http调试任务,能够记录并检查所有你的电脑和互联网之间的http通讯,可以设置断点,查看所有的“进 ...
- Java Swing 简单介绍
Swing 是一个为Java设计的GUI工具包. Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表. Swing提供许多比AWT更好的屏幕 ...
- MySQL 占用cpu 100%
目前的线上数据库,分为主从两个库,从库用来做比较耗时的数据统计分析. 今天top了一下从库服务器,发现mysqld 在很长一段时间都占用105% cpu,一开始以为是从库在处理主库的binlog. 两 ...
- 每天CSS学习之text-align
text-align是CSS的一个属性,其作用是设置文本的对齐方式.其值如下所示: 1.left:文本左对齐.如下所示: div{ text-align:left; } 结果: 2.right:文本右 ...
- swiftlint 你所要知道的所有!!
swiftin Should the opening brace of a function or control flow statement be on a new line or not ?:) ...
- Android : 代码多维度管理(产品风味) - flavorDimensions & productFlavors
一.关于配置产品风味 Android studio 升级到3.0之后,gradle增加了多维度管理配置,便于同一个项目中创建应用的不同版本,分别管理依赖项并签署配置.创建产品风味与创建构建类型类似:只 ...