服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - VC中控制台程序创建窗口的实例方法

VC中控制台程序创建窗口的实例方法

2022-03-09 14:19jobsxiao C/C++

在本篇文章里小编给大家分享的是关于VC中控制台程序创建窗口的实例方法及相关代码内容,有需要的朋友学习下吧。

在VC控制台程序中调用D3DVideoRender时,需要创建新的窗口控件显示图像

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include "windows.h"
#include "TCHAR.h"
 
//声明自定义消息处理函数
LRESULT CALLBACK WindowProc(
    HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
    );
 
int _tmain(int argc, _TCHAR* argv[])
{
    HINSTANCE hInstance;
    hInstance = GetModuleHandle(NULL);  //获取一个应用程序或动态链接库的模块句柄
    WNDCLASS Render_WND;
    Render_WND.cbClsExtra = 0;
    Render_WND.cbWndExtra = 0;
    Render_WND.hCursor = LoadCursor(hInstance, IDC_ARROW);  //鼠标风格
    Render_WND.hIcon = LoadIcon(hInstance, IDI_APPLICATION);    //图标风格
    Render_WND.lpszMenuName = NULL; //菜单名
    Render_WND.style = CS_HREDRAW | CS_VREDRAW; //窗口的风格
    Render_WND.hbrBackground = (HBRUSH)COLOR_WINDOW;    //背景色
    Render_WND.lpfnWndProc = WindowProc;    //【关键】采用自定义消息处理函数,也可以用默认的DefWindowProc
    Render_WND.lpszClassName = _T("RenderWindow");  //【关键】该窗口类的名称
    Render_WND.hInstance = hInstance;   //【关键】表示创建该窗口的程序的运行实体代号
 
    RegisterClass(&Render_WND);
 
    HWND hwnd = CreateWindow(
        _T("RenderWindow"),           //【关键】上面注册的类名lpszClassName,要完全一致 
        L"Zombie"//窗口标题文字 
        WS_OVERLAPPEDWINDOW, //窗口外观样式 
        0,             //窗口相对于父级的X坐标 
        0,             //窗口相对于父级的Y坐标 
        320,                //窗口的宽度 
        240,                //窗口的高度 
        NULL,               //没有父窗口,为NULL 
        NULL,               //没有菜单,为NULL 
        hInstance,          //当前应用程序的实例句柄 
        NULL);              //没有附加数据,为NULL 
 
    //去标题栏
    SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_CAPTION);
 
    //去边框
    SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) & ~(WS_EX_WINDOWEDGE | WS_EX_DLGMODALFRAME));
 
    // 显示窗口 
    ShowWindow(hwnd, SW_SHOW);
 
    // 更新窗口 
    UpdateWindow(hwnd);
 
    // 消息循环 
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return 0;
}
 
 
// 自定义消息处理函数的实现
LRESULT CALLBACK WindowProc(
    _In_  HWND hwnd,
    _In_  UINT uMsg,
    _In_  WPARAM wParam,
    _In_  LPARAM lParam
    )
{
    switch (uMsg)
    {
        case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }
 
        case WM_KEYDOWN:
        {
            if (wParam == VK_ESCAPE)//按Esc键退出
            {
                PostQuitMessage(0);
                return 0;
            }
        }
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

实例扩展:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <Windows.h>
using namespace std;
 
 
LRESULT CALLBACK __WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
 
    PAINTSTRUCT ps;
    HDC hdc;
    switch (msg) {
    case WM_CLOSE:
        MessageBox(NULL,"WM_CLOSE", "", NULL);
        break;
    default:
        break;
    }
 
    return DefWindowProc(hWnd, msg, wParam, lParam);
}
 
int main()
{
    // 窗口属性初始化
    HINSTANCE hIns = GetModuleHandle(0);
    WNDCLASSEX wc;
    wc.cbSize = sizeof(wc);                             // 定义结构大小
    wc.style = CS_HREDRAW | CS_VREDRAW;                 // 如果改变了客户区域的宽度或高度,则重新绘制整个窗口
    wc.cbClsExtra = 0;                                  // 窗口结构的附加字节数
    wc.cbWndExtra = 0;                                  // 窗口实例的附加字节数
    wc.hInstance = hIns;                                // 本模块的实例句柄
    wc.hIcon = NULL;                                    // 图标的句柄
    wc.hIconSm = NULL;                                  // 和窗口类关联的小图标的句柄
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;            // 背景画刷的句柄
    wc.hCursor = NULL;                                  // 光标的句柄
    wc.lpfnWndProc = __WndProc;                         // 窗口处理函数的指针
    wc.lpszMenuName = NULL;                             // 指向菜单的指针
    wc.lpszClassName = "LYSM_class";                    // 指向类名称的指针
 
    // 为窗口注册一个窗口类
    if (!RegisterClassEx(&wc)) {
        cout << "RegisterClassEx error : " << GetLastError() << endl;
    }
 
    // 创建窗口
    HWND hWnd = CreateWindowEx(
        WS_EX_TOPMOST,              // 窗口扩展样式:顶级窗口
        "LYSM_class",               // 窗口类名
        "LYSM_title",               // 窗口标题
        WS_OVERLAPPEDWINDOW,        // 窗口样式:重叠窗口
        0,                          // 窗口初始x坐标
        0,                          // 窗口初始y坐标
        800,                        // 窗口宽度
        600,                        // 窗口高度
        0,                          // 父窗口句柄
        0,                          // 菜单句柄
        hIns,                       // 与窗口关联的模块实例的句柄
        0                           // 用来传递给窗口WM_CREATE消息
    );
    if (hWnd == 0) {
        cout << "CreateWindowEx error : " << GetLastError() << endl;
    }
    UpdateWindow(hWnd);
    ShowWindow(hWnd, SW_SHOW);
 
    // 消息循环(没有会导致窗口卡死)
    MSG msg = { 0 };
    while (msg.message != WM_QUIT) {
        // 从消息队列中删除一条消息
        if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {           
            DispatchMessage(&msg);
        }
    }
 
    
    cout << "finished." << endl;
    getchar();
end:
 
    getchar();
    return 0;
}

到此这篇关于VC中控制台程序创建窗口的实例方法的文章就介绍到这了,更多相关VC中控制台程序如何创建窗口内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/jobsxiao/article/details/52651869

延伸 · 阅读

精彩推荐
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22