千家信息网

VC中控制台程序创建窗口的方法是什么

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,本篇内容主要讲解"VC中控制台程序创建窗口的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"VC中控制台程序创建窗口的方法是什么"吧!在VC控制台
千家信息网最后更新 2024年11月19日VC中控制台程序创建窗口的方法是什么

本篇内容主要讲解"VC中控制台程序创建窗口的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"VC中控制台程序创建窗口的方法是什么"吧!

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

#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);}

实例扩展:

#include #include 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中控制台程序创建窗口的方法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0