Windows窗口的创建

Windows窗口创建的基本代码:

#include <Windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(
    __in HINSTANCE hInstance,
    __in_opt HINSTANCE hPrevInstance,
    __in LPSTR lpCmdLine,
    __in int nShowCmd
    ) {
    TCHAR* appName = TEXT("Demo");
    HWND hwnd;
    MSG msg;
    WNDCLASS wndClass;
    wndClass.style = CS_HREDRAW | CS_VREDRAW;
    wndClass.lpfnWndProc = WndProc;
    wndClass.cbClsExtra = 0;
    wndClass.cbWndExtra = 0;
    wndClass.hInstance = hInstance;
    wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndClass.lpszMenuName = NULL;
    wndClass.lpszClassName = appName;

    if(!RegisterClass(&wndClass)) {
        MessageBox(NULL, TEXT("Register Class Error"), appName, 0);
        return 0;
    }

    hwnd = CreateWindow(
        appName,
        TEXT("Demo"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInstance,
        NULL
    );

    ShowWindow(hwnd, nShowCmd);
    UpdateWindow(hwnd);

    while(GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    switch(msg) {
    case WM_CREATE:
        {
            return 0;
        }
    case WM_PAINT:
        {
            hdc = BeginPaint(hwnd, &ps);
            GetClientRect(hwnd, &rect);
            DrawText(hdc, TEXT("Ray_xujianguo"), -1, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER);
            EndPaint(hwnd, &ps);
            return 0;
        }
    case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}

下面一部分一部分来解释:

  1.里面有一些函数我们来看看它们的作用

    LoadIcon                加载图标
    LoadCursor                加载鼠标光标
    GetStockObject            获取一个图形对象,本例子是获取一个画刷
    RegisterClass            注册一个窗口类
    MessageBox                消息框
    CreateWindow            创建一个窗口
    ShowWindow                显示窗口
    UpdateWindow            重绘窗口
    GetMessage                从消息队列中获取信息
    TranslateMessage        翻译键盘消息
    DispatchMessage            将消息转发给窗口
    BeginPaint                窗口开始绘制
    GetClientRect            获取窗口客户区的尺寸
    DrawText                显示一个文本字符串
    EndPaint                结束窗口的绘制
    PostQuitMessage            将”退出“消息插入消息队列中
    DefWindowProc            执行默认的消息处理

  2.一些数值常量

    在上面的程序中我们看到了CW_USEDEFAULT等常量,其实我们从前面的大写字母就可以看到这个常量的类型是什么了。

    前缀                        常量
    CS                        类风格选项
    CW                        创建窗口选项
    DT                        文本绘制选项
    IDI                        图标的ID号
    IDC                        光标的ID号
    MB                        消息框选项
    WM                        窗口消息
    WS                        窗口风格

  3.理解句柄

    HINSTANCE                实例句柄-程序本身
    HWND                    窗口句柄
    HDC                        设备环境句柄

  4.窗口类的注册

    

    看看WNDCLASS的内容:

    

  5.窗口的创建

    窗口类只是定义了窗口的一般特征,因此基于同一窗口类可以创建许多不同的窗口,在调用CreateWindow函数来创建窗口的时候,可以指定更多细节。

    

  6.窗口的显示

    

  7.消息循环

    

    先是从消息队列中获取消息,然后翻译键盘的消息,再把消息转发给窗口过程函数处理,窗口程序函数处理完毕后,就立即进行下一轮的消息循环。

  8.窗口过程函数

时间: 2024-11-02 23:38:58

Windows窗口的创建的相关文章

Windows 08 R2_创建AD DS域服务(图文详解)

目录 目录 Active Directory概念 创建第一个AD域控制器 搭建DNS服务器 使用Windows窗口程序创建AD域控制器 AD与LDAP的关系 使用Powershell来创建ADDS域控制器 检查ADDC域控制器是否安装成功 管理工具 创建额外域控制器 使用Windows窗口界面来安装额外域控制器 使用Powershell脚本来安装额外域控制器 Active Directory概念 AD(活动目录):是一种组织资源信息的方法,目录的意义在于我们可以通过标题或者说搜索条件来简单而有效

创建接收消息的windows窗口

我觉得应该花点时间熟悉一下windows编程了,不然项目的代码没法看啊.今天在家,实现了一个简单的接收消息的windows窗口,可以接收其他进程发送过来的消息. <windows程序设计>开头就讲了一个windows程序的基本框架,该例程创建了一个可视的窗口,步骤还挺多的.如果创建的窗口仅用于接收消息,那就简单得多,不需要我们注册一个自定义的WNDCLASS,也不需要将界面显示出来. 先看一下CreateWindow的帮助文档: http://msdn.microsoft.com/en-us/

win32手动创建windows窗口的,小记

摘抄自文档,其中的函数需要以后花时间看 向 WinMain 添加功能 首先,在 WinMain 函数内部创建 WNDCLASSEX 类型的窗口类结构. 此结构包含有关窗口的信息,如应用程序图标.窗口的背景色.在标题栏中显示的名称.窗口过程函数的名称等等.典型的 WNDCLASSEX 结构如下: WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndP

Windows 10 应用创建模糊背景窗口的三种方法

原文 Windows 10 应用创建模糊背景窗口的三种方法 现代的操作系统中创建一张图片的高斯模糊效果非常容易,不过如果要在窗口中获得模糊支持就需要操作系统的原生支持了.iOS/Mac 和 Windows 系统都对此有支持. 本文将介绍三种创建模糊背景窗口的方法.有人可能喜欢称之为毛玻璃窗口.亚克力窗口. This post is written in multiple languages. Please select yours: 最早我是在 StackOverflow 上回答一位网友的提问时

Windows窗口程序运行过程

现在,简单介绍下windows应用程序的大概运行过程,让刚开始接触Windows开发或者MFC开发的同学有一个大致的了解. 1.创建一个窗口首先要注册一个窗口类,初始化wndclass中的各个域,设置窗口过程函数. 2.调用RigisterClass来注册这个窗口类. 3.创建窗口.CreateWindow 4.显示窗口.ShowWindow 5.刷新窗口.UpdateWindow 5.消息循环. 这里主要讲解消息循环. 消息循环中的循环是由程序中 while(GetMessage(&msg,N

重温WIN32 API ------ 最简单的Windows窗口封装类

1 开发语言抉择 1.1 关于开发Win32 程序的语言选择 C还是C++ 在决定抛弃MFC,而使用纯Win32 API 开发Window桌面程序之后,还存在一个语言的选择,这就是是否使用C++.C++作为C的超集,能实现所有C能实现的功能.其实反之亦然,C本身也能完成C++超出的那部分功能,只是可能需要更多行的代码.就本人理解而言, 对于巨大型项目,还是使用纯C来架构更加稳妥: 对于中小型项目来说,C++可能更方便快捷.由于目前做的是中小项目,所以决定把C++作为主要开发语言. 1.2 关于C

在WPF控件上添加Windows窗口式调整大小行为

起因 项目上需要对Canvas中的控件添加调整大小功能,即能在控件的四个角和四条边上可进行相应的拖动,类似Windows窗口那种.于是在参考以前同事写的代码基础上,完成了该功能. 代码实现 Adorner 我们是给现有的控件添加功能,属于装饰功能.当然首先想到的就是Adorner.在MSDN中Adorner的介绍如下: 装饰器是一个绑定到 UIElement 的自定义 FrameworkElement. 装饰器呈现在装饰器层中,它是一个呈现图面,始终位于装饰元素或装饰元素集合的顶部:呈现装饰器独

Windows窗口消息大全

Windows窗口消息大全,全不全自己看 ////////////////////////////////////////////////////////////////////////// #include "AFXPRIV.H"//消息值的定义来源 #include "Dde.h"//DDE消息值的定义来源 #include "CPL.H"//控制面板消息值的定义来源 #include "WFEXT.H"//文件管理器的消

Windows下自由创建.htaccess文件的N种方法

.htaccess是apache的访问控制文件,apache中httpd.conf的选项配合此文件,完美实现了目录.站点的访问控 制,当然最多的还是rewrite功能,即URL重写,PHP中实现伪静态的一个重要途径,也是被公认为SEO中搜索引擎友好的极为有效的一个手段.尽 管前些天的黑屏风波闹的沸沸扬扬,但依本人拙见,windows用户并无任何减少.现在的一个实际问题就是windows不允许重命名时.的前面没有字 符,它认为这样的文件名是不合法的.这就造成我们无法通过重命名”新建文本文档.txt