菜鸟写窗口,丢掉WNDCLASS变量的成员,后果很严重

刚照着一本Windows程序设计教程,用API写了个窗口,用VC++6.0 编译 连接 都无错误,但是运行时候出错,程序运行不出来。弹出如下报错信息:


我机子的操作系统是 WindowsXP Pro SP3
程序的代码如下:

#include<windows.h>
 
LONG WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpszCmdLine,int nCmdShow)
{
    WNDCLASS wc;
    HWND hwnd;
    MSG msg;
 
    wc.style=0;                                      //class style
    wc.lpfnWndProc=(WNDPROC)WndProc;                 //Window procedure address
    wc.cbClsExtra = 0;                               //Class extra bytes
    wc.cbWndExtra = 0;                               //Window extra bytes
    wc.hInstance = hInstance;                        //Instance handle
    wc.hIcon = LoadIcon(NULL,IDI_WINLOGO);           //Icon handle
    wc.hCursor = LoadCursor(NULL,IDC_ARROW);         //Cursor handle
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);     //Background color
    wc.lpszClassName = "MyWndClass";                 //WNDCLASS name
 
    RegisterClass(&wc);
    hwnd = CreateWindow(
        "MyWndClass",                               //WNDCLASS name
        "SDK Application",                          //Window title
        WS_OVERLAPPEDWINDOW,                        //Window style
        CW_USEDEFAULT,                              //Horizontal position
        CW_USEDEFAULT,                              //Vertical position
        CW_USEDEFAULT,                              //Initial width
        CW_USEDEFAULT,                              //Initial height
        HWND_DESKTOP,                               //Handle of parent window
        NULL,                                       //Menu handle
        hInstance,                                  //Application's instance handle
        NULL                                        //Window-creation data
 
         
    );
 
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);
 
    while (GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
 
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT message,WPARAM wParam,LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    switch(message)
    {
    case WM_PAINT:
        hdc  = BeginPaint(hwnd,&ps);
        Ellipse(hdc,0,0,200,100);
        EndPaint(hwnd,&ps);
 
        return 0;
 
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
 
    }
 
    return DefWindowProc(hwnd,message,wParam,lParam);
}
Compile和Build都没有问题,就是按F5调试运行出现那个“该内存不能为‘read’”.程序运行不出来,点击“确定”直接回到编码区;点击“取消”就进入了VC编译器中的汇编命令区。搞得我一头雾水!

在论坛上发帖求助高人,原来在WinMain函数中WNDCLASS wc;给wc的成员赋值时,忘了给wc.lpszMenuName赋值。

这种问题的解决方法大致有两招:1、初始化wc:WNDCLASS wc={0};
2、给wc.lpszMenuName赋值:wc.lpszMenuName=NULL 或wc.lpszMenuName=“Name”//此处Name可以是任意字符

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要利用结构变量建立公用窗口,可以按照以下步骤进行操作: 1. 定义一个结构体,用于存储窗口的相关信息,包括窗口句柄、窗口标题、窗口大小等。 2. 在程序中定义一个全局的结构变量,用于存储公用窗口的信息。 3. 在程序初始化时,创建公用窗口并将其句柄存储到全局结构变量中。 4. 在需要使用公用窗口的地方,通过全局结构变量获取窗口句柄,并进行相关操作。 下面是一个示例代码: ``` #include <windows.h> // 定义窗口信息结构体 struct WindowInfo { HWND hwnd; const char* title; int width; int height; }; // 定义全局变量 WindowInfo g_window; // 窗口过程函数 LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd, msg, wParam, lParam); } } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 创建窗口WNDCLASS wc = { 0 }; wc.hInstance = hInstance; wc.lpfnWndProc = WndProc; wc.lpszClassName = "MyWindowClass"; RegisterClass(&wc); // 创建窗口并存储句柄到全局变量中 g_window.hwnd = CreateWindow("MyWindowClass", "My Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL); g_window.title = "My Window"; g_window.width = 640; g_window.height = 480; // 显示窗口 ShowWindow(g_window.hwnd, nCmdShow); UpdateWindow(g_window.hwnd); // 消息循环 MSG msg = { 0 }; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } ``` 在上面的代码中,我们定义了一个 `WindowInfo` 结构体,用于存储窗口信息。然后定义了一个全局变量 `g_window`,用于存储公用窗口的信息。在程序初始化时,我们创建了一个窗口并将其句柄存储到 `g_window.hwnd` 中。在需要使用公用窗口的地方,我们可以通过 `g_window.hwnd` 获取窗口句柄,并进行相关操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值