程序已经没有问题了,Build都通过了,
但是
RegisterClass(&wndclass)
总是有错,无法注册,
是不是我的设置有问题?

解决方案 »

  1.   

    我觉得这个应该没用吧,
    因为我不是一个程序有此问题,
    是好几个程序都是这个同样的问题。贴一个上来:#include<windows.h>
    #include<stdio.h>
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
    {
    HWND hwnd;
    MSG Msg;
    WNDCLASS wndclass; char lpszClassName[]="窗口_鼠标";
    char lpszTitle[]="My_Windows"; wndclass.lpfnWndProc=WndProc;
    wndclass.cbClsExtra=0;
    wndclass.cbWndExtra=0;
    wndclass.hInstance=hInstance;
    wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName=NULL;
    wndclass.lpszClassName=lpszClassName;

    if(!RegisterClass(&wndclass))
    {
    MessageBeep(0);
    return FALSE;
    } hwnd=CreateWindow(lpszClassName,lpszTitle,WS_VISIBLE|WS_MINIMIZEBOX,50,50,450,450,NULL,NULL,hInstance,NULL);
    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;
    TEXTMETRIC tm;
    HBRUSH hbrush;
    HPEN hpen;
    HCURSOR hcursor;
    char str[15];
    static int x,y;
    switch(message)
    {
    case WM_MOUSEMOVE:
    x=LOWORD(lParam);
    y=HIWORD(lParam);
    if(x>50&&x<150&&y>50&&y<150)
    {
    hcursor=LoadCursor(NULL,IDC_CROSS);
    SetCursor(hcursor);
    }
    if(x>150&&x<250&&y>50&&y<150)
    {
    hcursor=LoadCursor(NULL,IDC_SIZEALL);
    SetCursor(hcursor);
    }
    if(x>250&&x<350&&y>50&&y<150)
    {
    hcursor=LoadCursor(NULL,IDC_SIZENESW);
    SetCursor(hcursor);
    }
    if(x>50&&x<150&&y>150&&y<250)
    {
    hcursor=LoadCursor(NULL,IDC_IBEAM);
    SetCursor(hcursor);
    }
    if(x>150&&x<250&&y>150&&y<250)
    {
    hcursor=LoadCursor(NULL,IDC_WAIT);
    SetCursor(hcursor);
    }
    if(x>250&&x<350&&y>150&&y<250)
    {
    hcursor=LoadCursor(NULL,IDC_UPARROW);
    SetCursor(hcursor);
    }
    if(x>50&&x<150&&y>250&&y<350)
    {
    hcursor=LoadCursor(NULL,IDC_SIZEWE);
    SetCursor(hcursor);
    }
    if(x>150&&x<250&&y>250&&y<350)
    {
    hcursor=LoadCursor(NULL,IDC_SIZENESW);
    SetCursor(hcursor);
    }
    if(x>250&&x<350&&y>250&&y<350)
    {
    hcursor=LoadCursor(NULL,IDC_SIZENS);
    SetCursor(hcursor);
    }
    if(x>350||y>350)
    {
    hcursor=LoadCursor(NULL,IDC_HELP);
    SetCursor(hcursor);
    }
    if(x<50||y<50)
    {
    hcursor=LoadCursor(NULL,IDC_APPSTARTING);
    SetCursor(hcursor);
    } hdc=GetDC(hwnd);
    GetTextMetrics(hdc,&tm);
    hbrush=(HBRUSH)GetStockObject(WHITE_BRUSH);
    SelectObject(hdc,hbrush);
    hpen=(HPEN)GetStockObject(BLACK_PEN);
    SelectObject(hdc,hpen);
    Rectangle(hdc,5,5,tm.tmAveCharWidth*8,tm.tmHeight+3);
    sprintf(str,"%d,%d\0",x,y);
    TextOut(hdc,5,5,str,lstrlen(str));
    EndPaint(hwnd,&ps);
    break; case WM_PAINT:
    hdc=BeginPaint(hwnd,&ps);
    hpen=(HPEN)GetStockObject(BLACK_PEN);
    SelectObject(hdc,hpen);
    Rectangle(hdc,50,50,350,350);
    MoveToEx(hdc,50,250,NULL);
    LineTo(hdc,50,150);
    MoveToEx(hdc,50,250,NULL);
    LineTo(hdc,350,250);
    MoveToEx(hdc,150,50,NULL);
    LineTo(hdc,150,350);
    MoveToEx(hdc,250,50,NULL);
    LineTo(hdc,250,350);
    EndPaint(hwnd,&ps);
    break; case WM_DESTROY:
    PostQuitMessage(0); default:
    return DefWindowProc(hwnd,message,wParam,lParam);
    }
    return (0);
    }
      

  2.   

    没指定style,如:
    wndclass.style = CS_HREDRAW|CS_VREDRAW;
      

  3.   

    你是不是多次注册窗口,而且前几次注册成功,后来就不行了?
    如果是这样,你把char lpszClassName[]="窗口_鼠标";
    的字符串变断点。
    因为系统用于保存这些字符的空间是有限的