菜鳥寫窗口,丟掉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可以是任意字符

發佈了5 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章