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应用程序,但凡稍微复杂一点的程序都会有工具栏和状态栏,工具栏主要用于一些快捷功能按钮.比如典 ...
随机推荐
- rdesktop安装教程
1.介绍 rdesktop是Linux下连接windows远程桌面的工具 2.下载 https://github.com/rdesktop/rdesktop/releases 3.安装 mkdir / ...
- windows中mysql5.7保存emoji表情
1.找到my.ini文件,修改一下配置: [client] default-character-set=utf8mb4 [mysqld] character-set-client-handshake ...
- java 一些容易忽视的小点-数据类型和运算符篇
注释 文档注释: 以"/**"开头以"*/"结尾,注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API) 行注释: 以 ...
- UVa 10859 - Placing Lampposts 树形DP 难度: 2
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- 高效方便的IO库: System.IO.Pipelines
我们在编写网络程序的时候,经常会进行如下操作: 申请一个缓冲区 从数据源中读入数据至缓冲区 解析缓冲区的数据 重复第2步 表面上看来这是一个很常规而简单的操作,但实际使用过程中往往存在如下痛点: 数据 ...
- jsp标签之jsp:setProperty用法
参考:http://blog.csdn.net/wanghaishanren/article/details/2047400
- HTML(四)Form标签
<form>…</form> 定义供用户输入的 HTML 表单 例子 <html> <body> <form method="ge ...
- information_schema
views 视图表,查看当前数据库有哪些视图 select table_catalog,table_schema,table_name,is_updatable,definer,security_ty ...
- Cracking The Coding Interview 3.5
//Implement a MyQueue class which implements a queue using two stacks. #include <iostream> #in ...
- C++基础知识:异常处理
1.C++中的异常处理(1)C++ 中提供了 try和catch语句块对可能产生异常的代码进行分开处理 -try语句块处理正常逻辑 -catch语句块处理异常(2)C++ 语言中通过 throw语 ...