HWND m_hWndSocket = NULL; WNDCLASS wndCls;
wndCls.style = CS_HREDRAW | CS_VREDRAW;
wndCls.cbClsExtra = 0;
wndCls.cbWndExtra = 0;
wndCls.hbrBackground = 0;
wndCls.hCursor = NULL;
wndCls.hIcon = NULL;
wndCls.hInstance = NULL;
wndCls.lpfnWndProc = SocketWndProc;
wndCls.lpszMenuName = NULL;
wndCls.lpszClassName = "FPSSocketWnd"; cout<<"reg:"<<RegisterClass(&wndCls)<<endl; m_hWndSocket = ::CreateWindow("FPSSocketWnd","Socket",WS_POPUP,0,0,100,100, NULL,NULL,NULL,NULL); cout<<"m_hWndSocket:"<<m_hWndSocket<<endl;
if(m_hWndSocket == NULL)
{
cout<<GetLastError()<<endl;
}     注册窗口类成功了,为什么CreateWindow会失败呢?请教.

解决方案 »

  1.   


    //窗口函数如下:
    LRESULT CALLBACK SocketWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    return 0;
    }
      

  2.   

    /********************************************************************
     *SDK窗口的创建步骤:
     *-Ctrl+N
     *-点击Projects 选项卡
     *-点击Win32 Application
     *-Project name:输入工程名称,然后OK
     *-选择An empty project.
     *-点击Finish完成,再点击OK *-然后点击上面的菜单Project
     *-点击Add To Project->New...
     *-点击Files选项卡
     *-选择C++ Source File
     *-File:输入文件名称
     *-点击OK
     *-最后把代贴进去,进行编译就OK了!
     **********************************************************************/
    #include "windows.h"//窗口过程函数申明
    LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);//Win32程序主函数WinMain
    int WINAPI WinMain (HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,
                        int nCmdShow)
    {
        HWND hWnd;      // 主窗口句柄
        MSG msg;        // 窗口消息
        WNDCLASS wc;    // 窗口類

    if (!hPrevInstance)

    // 填充窗口類信息
    wc.style = CS_HREDRAW|CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = "SdkDemo1";
    // 註冊窗口類
    RegisterClass(&wc);
    } // 創建應用程序主窗口
    hWnd=CreateWindow ("SdkDemo1",              // 窗口類名
    "第一個Win32 SDK應用程序",         // 窗口標題
    WS_OVERLAPPEDWINDOW,               // 窗口樣式
    CW_USEDEFAULT,                     // 初始化 x 坐標
    CW_USEDEFAULT,                     // 初始化 y 坐標
    CW_USEDEFAULT,                     // 初始化窗口寬度
    CW_USEDEFAULT,                     // 初始化窗口高度
    NULL,                              // 父窗口句柄
    NULL,                              // 窗口菜單句柄
    hInstance,                         // 程序實例句柄
    NULL);                             // 創建參數

        // 顯示窗口
        ShowWindow(hWnd,SW_SHOW);
        // 更新主窗口客戶區
        UpdateWindow(hWnd);
        // 開始消息循環
        while (GetMessage(&msg,NULL,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }

    return msg.wParam;

    }// WndProc 主窗口過程
    LRESULT WINAPI WndProc (HWND hWnd,
                            UINT msg,
                            WPARAM wParam,
                            LPARAM lParam)
    {
    //在窗口內畫一個圓形
    HDC hdc;
    RECT rc;
    HPEN hPen,hPenOld;
    HBRUSH hBrush,hBrushOld;
    switch (msg)
    {
        case WM_PAINT:
    hdc=GetDC(hWnd);
    GetClientRect(hWnd,&rc);
    hPen=CreatePen(PS_SOLID,0,RGB(0,0,0));
    hBrush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,0,0));
    hPenOld=(HPEN)SelectObject(hdc,hPen);
    hBrushOld=(HBRUSH)SelectObject(hdc,hBrush);
    Ellipse(hdc,rc.left,rc.top,rc.right,rc.bottom);
    SelectObject(hdc,hPenOld);
    SelectObject(hdc,hBrushOld);
    ReleaseDC(hWnd,hdc);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:break;
    }
    return DefWindowProc(hWnd,msg,wParam,lParam);
    }
      

  3.   

    摘自windows程序设计/*------------------------------------------------------------
       HELLOWIN.C -- Displays "Hello, Windows 98!" in client area
                     (c) Charles Petzold, 1998
      ------------------------------------------------------------*/#include <windows.h>LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static TCHAR szAppName[] = TEXT ("HelloWin") ;
         HWND         hwnd ;
         MSG          msg ;
         WNDCLASS     wndclass ;     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         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 = szAppName ;     if (!RegisterClass (&wndclass))
         {
              MessageBox (NULL, TEXT ("This program requires Windows NT!"), 
                          szAppName, MB_ICONERROR) ;
              return 0 ;
         }
         
         hwnd = CreateWindow (szAppName,                  // window class name
                              TEXT ("The Hello Program"), // window caption
                              WS_OVERLAPPEDWINDOW,        // window style
                              CW_USEDEFAULT,              // initial x position
                              CW_USEDEFAULT,              // initial y position
                              CW_USEDEFAULT,              // initial x size
                              CW_USEDEFAULT,              // initial y size
                              NULL,                       // parent window handle
                              NULL,                       // window menu handle
                              hInstance,                  // program instance handle
                              NULL) ;                     // creation parameters
         
         ShowWindow (hwnd, iCmdShow) ;
         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)
    {
         HDC         hdc ;
         PAINTSTRUCT ps ;
         RECT        rect ;
         
         switch (message)
         {
         case WM_CREATE:
              PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
              return 0 ;
              
         case WM_PAINT:
              hdc = BeginPaint (hwnd, &ps) ;
              
              GetClientRect (hwnd, &rect) ;
              
              DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
                        DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
              
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY:
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }