C++创建windows窗口

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>  

//回调函数
LRESULT CALLBACK windowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg)
    {
    case WM_SIZE:
        break;
    case WM_CLOSE:
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        break;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}


//    当前实例的指针(句柄)       上一个实例的指针(句柄) 命令行(给这个exe传递的信息)  是否显示窗口
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
    //1 注册窗口类
    ::WNDCLASSEXA winClass;
    winClass.lpszClassName ="Raster" ;//*
    winClass.cbSize = sizeof(::WNDCLASSEX);
    winClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;
    winClass.lpfnWndProc = windowProc;//*回到函数的指针
    winClass.hInstance = hInstance;
    winClass.hIcon = 0;
    winClass.hIconSm = 0;
    winClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    winClass.hbrBackground=(HBRUSH)(BLACK_BRUSH);
    winClass.lpszMenuName = NULL;
    winClass.cbClsExtra = 0;
    winClass.cbWndExtra = 0;

    RegisterClassExA(&winClass);

    //2 创建窗口


    //返回的窗口句柄
    HWND hWnd = CreateWindowExA(
        NULL,
        "Raster",//更具注册的名称找到注册窗口类的数据
        "Raster",//窗口的标题
        WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,//窗口的风格
        0,//位置
        0,
        480,//宽高
        320,
        0,//菜单
        0,//父窗口
        hInstance,//句柄    
        0//用户自定义的变量
        );

    UpdateWindow(hWnd);//更新窗口
    ShowWindow(hWnd, SW_SHOW);//显示窗口

    //window 消息循环
    MSG msg = { 0 };
    while (true)
    {
        if (msg.message == WM_DESTROY
            || msg.message == WM_CLOSE
            || msg.message == WM_QUIT) 
        {
            break;
        }
        //从队列中查看是否有消息  消息在window中为数字 这是是设置消息的最大值,最小值,全是0,默认是所有
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
            TranslateMessage(&msg);//解释消息
            DispatchMessage((&msg));//分发消息
        }
    }

    return 0;
}
如果这个异常提示:LNK2019    无法解析的外部符号 _main,该符号在函数 "int __cdecl invoke_main(void)"...

打开项目属性,找到C/C++  -->预处理器  -->预处理器定义   添加_WINDOWS

打开项目属性,找到连接器 -->系统  -->子系统  选择窗口(/SUBSYSTEM:WINDOWS)

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在C++ Windows应用程序窗口创建菜单,您可以按照以下步骤进行操作: 1. 在Visual Studio中打开您的项目,并打开资源编辑器。 2. 在资源编辑器中创建一个新的菜单资源,并为其指定一个ID。 3. 在您的窗口类中添加一个成员变量,用于保存菜单的句柄。 4. 在窗口类的消息处理函数中添加对WM_CREATE消息的处理代码。在这个处理函数中,使用LoadMenu()函数加载菜单资源,并使用GetSubMenu()函数获取菜单中的子菜单。然后,使用SetMenu()函数将子菜单设置为窗口的菜单。 5. 在窗口类的消息处理函数中添加对WM_COMMAND消息的处理代码。在这个处理函数中,根据命令ID执行所需的操作。 以下是一个示例代码,演示如何在C++ Windows应用程序窗口创建菜单: ```cpp class CMyWindow : public CFrameWnd { public: CMyWindow() { // 加载菜单资源并获取子菜单 HMENU hMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_MENU1)); m_hSubMenu = GetSubMenu(hMenu, 0); // 将子菜单设置为窗口菜单 SetMenu(m_hSubMenu); } afx_msg void OnFileOpen() { // 打开文件操作 } afx_msg void OnFileSave() { // 保存文件操作 } DECLARE_MESSAGE_MAP() private: HMENU m_hSubMenu; }; BEGIN_MESSAGE_MAP(CMyWindow, CFrameWnd) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND(ID_FILE_SAVE, OnFileSave) END_MESSAGE_MAP() ``` 在这个示例中,我们使用LoadMenu()函数加载了一个名为IDR_MENU1的菜单资源,并使用GetSubMenu()函数获取了菜单中的第一个子菜单。然后,我们将子菜单设置为窗口的菜单,并使用ON_COMMAND宏将每个菜单项与窗口类中的消息处理函数关联起来。当用户选择“打开”菜单项时,将调用OnFileOpen()函数,当用户选择“保存”菜单项时,将调用OnFileSave()函数。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值