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应用程序,但凡稍微复杂一点的程序都会有工具栏和状态栏,工具栏主要用于一些快捷功能按钮.比如典 ...
随机推荐
- [LeetCode] 231. Power of Two ☆(是否2 的幂)
描述 Given an integer, write a function to determine if it is a power of two. 给定一个整数,编写一个函数来判断它是否是 2 的 ...
- Oracle awr报告生成操作步骤
1.登录主机切换到oracle用户 ssh root@192.168.220.128 su - oracle 2.以sysdba身份登录数据库 sqlplus / as sysdba 3.执行@?/r ...
- Qt之获取子部件
Qt5.10 QList<QObject*> list_children = this->children(); for(int i=0;i<list_children.siz ...
- win10系统office2010每次打开总是出现配置进度
- 回声UDP服务器端/客户端
UDP是具有数据边界的协议,传输中调用I/O函数的次数非常重要.输入函数的调用次数要和输出函数的调用次数完全一致,这样才能保证接受全部已发送的数据. TCP套接字中需注册待传输数据的目标IP和端口,而 ...
- mysql迁移到ubuntu遇到到问题
1.表名大小写敏感,linux下到mysql: 数据库名与表名是严格区分大小写的: 表的别名是严格区分大小写的: 列名与列的别名在所有的情况下均是忽略大小写的: 变量名也是严格区分大小写的. 修改方法 ...
- laravel中的注册页面
<?php namespace App\Http\Controllers; use App\User; use Illuminate\Http\Request; class RegisterCo ...
- php把数据转换为json格式
public function demos(){ $data=[ 'state'=>1, 'msg'=>'更新成功' ]; return json_encode($data); }
- Win10系列:UWP界面布局基础3
在实际项目开发中,为控件属性赋值时经常会遇到属性值在设计时处于未知状态,而只有在应用程序运行时才能获取到.这种情况下,直接赋值方法是无法满足的,可以使用XAML标记扩展(Markup Extensio ...
- Win10系列:VC++ Direct3D开发基础1
在介绍如何使用Direct3D项目模版来绘制立体图形之前,首先为读者介绍在Direct3D应用程序开发过程中涉及到的一些常用概念. (1)资源 资源是指可以被Direct3D图形管线所访问的内存空间, ...