C++面向对象与可视化程序设计MFC

为什么程序会在窗口句柄那一栏显示访问冲突(初学MFC,不懂)

#include<windows.h>   //底层实现窗口的头文件

//程序入口函数

//WINAPI  代表_stdcall 参数传递的顺序,从右到左,依次入栈,并且在函数返回前清空堆栈
int    WINAPI WinMain(
    HINSTANCE hInstance,  //应用程序实例句柄(后面应用程序实例句柄传入的形参) 
    HINSTANCE hPrevInstance,  //上一个应用程序句柄,在Win32环境下,参数一般为NULL,不起作用了
    LPSTR lpCmdline,        //char*argv[]
    int nShowCmd)           //显示命令  最大化 最小化 正常
{/*
    1、设计窗口
    2、注册窗口
    3、创建窗口
    4、显示和更新
    5、通过循环取消息
    6、处理消息(窗口过程)
*/
//1、设计窗口
//    (窗口类)
    WNDCLASS wc;
    wc.cbClsExtra = 0; //类的额外的内存
    wc.cbWndExtra = 0;//窗口的额外的内存
                                            //(白色画笔,直接选择按F1在线跳转看,然后输入就行了)
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//设置背景
    wc.hCursor = LoadCursor(NULL, IDC_HAND);    //设置光标 如果第一个为NULL,代表使用系统设置的光标
    wc.hIcon = LoadIcon(NULL, IDI_ERROR);      //设置光标 如果第一个为NULL,代表使用系统设置的光标
    wc.hInstance=hInstance;    //应用程序实例句柄,传入WinMain中的形参即可
//    wc.lpfnWndProc = WindowProc;        //回调函数,窗口过程
    wc.lpszClassName = TEXT("WIN");     //指定窗口类名称
    wc.lpszMenuName = NULL;      //菜单名称
    wc.style = 0;  //显示风格,0代表默认风格

//2、注册窗口类
    RegisterClass(&wc);

//3、创建窗口

    /*
    lpClassName,     类名
    lpWindowName,    标题名
    dwStyle,         WS_OVERLAPPEDWINDOW 风格         
    x,               显示坐标    CW_USEDEFAULT   默认值
    y,               显示坐标    CW_USEDEFAULT   默认值
    nWidth,          宽度        CW_USEDEFAULT   默认值
    nHeight,         高度        CW_USEDEFAULT   默认值
    hWndParent,      父窗口,NULL 以#号传出
    hMenu,           菜单   NULL
    hInstance,       实例句柄  hInstance
    lpParam          附加值 鼠标附加值  NULL
    */

    //窗口句柄
    HWND hwnd=CreateWindow(wc.lpszClassName, TEXT("WINDOWS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

    //4、显示和更新
    ShowWindow(hwnd, SW_SHOWNORMAL);

    UpdateWindow(hwnd);

    //5、通过循环取消息
    /*
    
    HWND        hwnd;               主窗口句柄
    UINT        message;            具体消息名称
    WPARAM      wParam;             附加消息  键盘消息
    LPARAM      lParam;             附加消息  鼠标消息(鼠标左右键)
    DWORD       time;               消息产生的时间
    POINT       pt;                 附加消息  鼠标消息(坐标点的消息)
    
    */
    MSG msg;

    while (1) {

/*
    _Out_ LPMSG lpMsg,         封装好的消息的指针
    _In_opt_ HWND hWnd,        捕获窗口, 填NULL代表捕获所有窗口
    _In_ UINT wMsgFilterMin,   最小和最大的过滤消息,一般填0
    _In_ UINT wMsgFilterMax    填0代表捕获所有的消息
*/

        if (GetMessageW(&msg,NULL,0,0)==FALSE) {
            break;
        }
        //翻译消息
        TranslateMessage(&msg);

        //不为false 则分发消息
        DispatchMessage(&msg);
    }

    return 0;
}

可能是你用了重复的窗口类名,固定的类名WIN,试用一个唯一的窗口类名来标识你的窗口类。。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/348428
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C++/MFC 从注册表中 读取串口
  • 除此之外, 这篇博客: MFC/C++运用多媒体定时器实现文件录入和文件格式化显示中的 1. 多媒体定时器: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •         多媒体定时器是一种精度较高的定时器,其与won32传统的定时器有着一定程度上的区别,在工业生产中需要及时响应且要满足较高精度需求时常常会用到这种定时器,多媒体定时器不依赖于消息机制(也就是win32中的定时器,使用Settimer函数创建一个对象,通过消息WM_TIMER添加一个ontimer的消息响应函数,每过一个时间间隔时,系统就会调用这个ontimer函数中的功能),多媒体定时器则是另外开辟一个独立线程来执行定时器回调函数,相比于win32定时器响应更快,容错率更高,精度也更高。

  • 您还可以看一下 胡兵老师的C++MFC开发连机五子棋游戏课程中的 服务器端界面开发小节, 巩固相关知识点