创建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编程___创建窗口的更多相关文章

  1. Win32 SDK 编程开始, 创建窗口, 消息的处理, 消息循环

    Windows SDK 编程的一般步骤为: 1. 注册窗口类, 使用到的结构 WNDCLASSEX, 函数 RegisterClassEx. 2. 创建窗口, 函数 CreateWindowEx. 3 ...

  2. Windows运行机理——创建窗口

    Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 Windows 窗口在创建之前,其属性必须设定好,所谓属性包括类的名字 ...

  3. 16 Windows编程——系统内置窗口子类型之edit、ComboBox、ownerbutton、listbox

    edit类型的子窗口 ES_MULTILINE:多行输入文本框 窗口的消息: WL_COMMAND: EN_CHANGE:当edit窗口内的文本内容改变的时候,edit子窗口给父窗口发送一个WL_CO ...

  4. 学习windows编程 day3 之窗口绘画二:边框绘制函数

    #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM l ...

  5. 学习windows编程 day3 之窗口绘画一:点线绘制

    #include <windows.h> #include <math.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, ...

  6. 13 Windows编程——系统内置窗口子类型之静态子窗口

    静态子窗口类型 wndclass:static 源码 #include<Windows.h> #include<Windowsx.h> HINSTANCE G_h; LRESU ...

  7. 15 Windows编程——系统内置窗口子类型之button

    button子类型BS_3STATE.BS_AUTO3STATE.BS_AUTOCHECKBOX 源码 #include<Windows.h> #include<Windowsx.h ...

  8. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记1——创建窗口&GDI

    第1章 创建窗口 步骤: 窗口类的设计 窗口类的注册 窗口的正式创建 窗口的显示与更新 消息循环体系 窗口过程函数处理消息 1. 设计:使用WNDCLASSEX结构体,这里注意的是C++中的结构体中的 ...

  9. 【Windows编程】系列第六篇:创建Toolbar与Statusbar

    上一篇我们学习了解了如何使用Windows GDI画图,该应用程序都是光光的静态窗口,我们使用Windows应用程序,但凡稍微复杂一点的程序都会有工具栏和状态栏,工具栏主要用于一些快捷功能按钮.比如典 ...

随机推荐

  1. ubuntu 双硬盘挂载 windows分区自动挂载

    sudo fdisk -l 查看硬盘情况 1:新建一个目录,例:old 2:mount  /dev/sdb1  old 3:cd old 4:ls  (就可以看到新硬盘的内容了) 取消挂载:umoun ...

  2. hash与平衡二叉树的区别

    哈希表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方 https://blog.csdn.net/duan19920101/article/det ...

  3. LY.JAVA面向对象编程.修饰符

    2018-07-18 09:20:25 /* 修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类: ...

  4. 2-MAVEN 基本命令

    MVN的基本命令 mvn package:打包 >生成了target目录 >编译了代码 >使用junit测试并生成报告 >生成代码的jar文件 >运行jar包: java ...

  5. vs2017 Mariadb/mysql之旅

    记录vs2017使用 ef6+mysql的开发 填坑之旅.我的环境 vm+centos7+ docker-ce+mariadb+vs2017 总的原则是MySql.Data.Entity 要和 mys ...

  6. OSError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/django'

    http://blog.csdn.net/qq_34078897/article/details/50821553 权限问题,sudo

  7. Blazor

    https://docs.microsoft.com/zh-cn/windows/uwp/get-started/construct-form-learning-track https://docs. ...

  8. 遍历所有子物体中renderer(渲染器)中的material(材质)

    //得到所有可渲染的子物体Renderer[] rds = transform.GetComponentsInChildren<Renderer>();//逐一遍历他的子物体中的Rende ...

  9. OOP⑷

    1.对象数组: /** *学生类 */ public class Student { // 创建一个对象数组保存3名学生的信息 Student[] stus = new Student[3]; int ...

  10. day24 模块03_re

    休养生息 --模块03 1.正则表达式 2.在python中使用正则.re 一,正则表达式 (匹配字符串,主要是给字符串使用的) 1)元字符 .  除换行符之外 \w 数字,字母,下划线组成   \W ...