zoukankan      html  css  js  c++  java
  • 菜鸟写窗口,丢掉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可以是任意字符

  • 相关阅读:
    Spring MVC与JAX-RS比较与分析
    JDK历史版本下载
    第六篇:为多态基类声明虚析构函数
    第五篇:明确拒绝不想编译器自动生成的拷贝构造函数和赋值运算符重载函数
    第四篇:了解 C++ 默默编写并调用的函数
    第三篇:确保对象在被使用前的初始化
    poj 2125(最小割)
    hdu 4704(费马小定理)
    hdu 4705(树形DP)
    poj 3469(网络流模版)
  • 原文地址:https://www.cnblogs.com/call-from-dream/p/6238289.html
Copyright © 2011-2022 走看看