CreateWindow要不要指出父窗口句柄?

解决方案 »

  1.   

    我刚才传了一个父窗口句柄,就是View中的m_hWnd,但是CreateWindow返回的句柄还是NULL,不过错误代码是0,邪门
      

  2.   

    hInst为dll的地址,是否要exe的地址。
      

  3.   

    dll中使用资源要加些什么语句,我忘了
      

  4.   

    哈哈,300分
    BOOL CMsgSkSever::CreateSocketWnd()
    {
        WNDCLASS  wc;
        BOOL rt = FALSE;
    HINSTANCE hins  = AfxGetInstanceHandle();    wc.style = 0;
        wc.lpfnWndProc = (WNDPROC)SocketWndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hins;
        wc.hIcon = NULL;
        wc.hCursor = NULL;
        wc.hbrBackground = NULL; 
        wc.lpszMenuName =  NULL;
        wc.lpszClassName = "SocketdllWClass";
        if(RegisterClass(&wc))
        {
            m_hwndSocket = CreateWindow( "SocketdllWClass", "Socket Notification Sink",
                        WS_OVERLAPPED,0, 0, 0, 0, NULL, NULL, hins, NULL);
            if(m_hwndSocket)rt = TRUE;
        }
        return rt;
    }                                 
      

  5.   

    HINSTANCE hins  = AfxGetInstanceHandle();
    hins 可以用NULL
      

  6.   

    我照着waterpig(waterpig)仁兄的方法改写了一下程序代码都一样,只是不过因为我用的是sdk dll, hins直接用的是DllMain中的hInst,还是不行,CreateWindow返回值依然为NULL,而且错误代码还是0把hins替换成NULL结果也是一样?
      

  7.   

    我把exe的HINSTANCE传给dll,结果还是为NULL,错误代码为0
      

  8.   

    #include <windows.h>HWND g_hWnd = NULL;BOOL CALLBACK SocketWndProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    /*    switch(uMsg)
        {
        case WM_SOCKET_NOTIFY:
         
            return TRUE;
        }
        */
    return DefWindowProc(hDlg, uMsg, wParam, lParam);
    }BOOL CreateSocketWnd(HINSTANCE hins)
    {
        WNDCLASS  wc;
        BOOL rt = FALSE;    wc.style = 0;
        wc.lpfnWndProc = (WNDPROC)SocketWndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hins;
        wc.hIcon = NULL;
        wc.hCursor = NULL;
        wc.hbrBackground = NULL; 
        wc.lpszMenuName =  NULL;
        wc.lpszClassName = "SocketdllWClass";
        if(RegisterClass(&wc))
        {
            g_hWnd = CreateWindow( "SocketdllWClass", "Socket Notification Sink",
                        WS_OVERLAPPED,0, 0, 0, 0, NULL, NULL, hins, NULL);
            if(g_hWnd)rt = TRUE;
        }
        return rt;
    }                                BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpReserved)
    {
    switch (fdwReason){
    case DLL_PROCESS_ATTACH:
    return CreateSocketWnd(hinstDLL);
    }
    return TRUE;
    }