各位如何在DLL中编写代码,通过调用该DLL的到出函数,生成窗口,并使该窗口能够接受消息,最好给个源代码。有分的。

解决方案 »

  1.   

    直接用CreateWindow()不行吗?关键是要通过export函数传入该窗口的父窗口的句柄(HWND hWndParent)。
      

  2.   

    在窗口资源、窗口消息处理进程包含到dll内部,就可以在外部创建吧?
    也可以把窗口创建 显示写成一个函数导出一个函数接口就可以了吧。
      

  3.   

    好象不行,我试过,只是在任务条上显示多了一个窗体,但是在桌面上却没有窗口显示,ShowWindow(...)我也写了。那位有源代码可以贴出来看看吗?
      

  4.   

    好象不行,我试过,只是在任务条上显示多了一个窗体,但是在桌面上却没有窗口显示,ShowWindow(...)我也写了。那位有源代码可以贴出来看看吗?
      

  5.   

    如果你使用MFC的话,举例如下:
    (1)在DLL中写一个类CYourWnd继承CWnd;
    (2)定义全局变量CYourWnd *g_pWnd;
    (3)DLL的export函数:
    _declspec(dllexport) void DllShowWindow(HWND hWndParent)
    {
        ......
        g_pWnd = new CYourWnd(......);
        if(g_pWnd == NULL) return;
        CWnd *pWndParent = CWnd::FromHandle(hWndParent);
        if(g_pWnd->Create(......, pWndParent, ......))
            g_pWnd->ShowWindow(SW_SHOW);
        ......
    }
    (4)DLL的ExitInstance()中:
    if(g_pWnd != NULL)
    {
        HWND hWnd = g_pWnd->GetSafeHwnd();
        if((hWnd != NULL) && (::IsWindow(hWnd)))
            g_pWnd->DetroyWindow();    delete g_pWnd;
    }
    (5)该窗口的消息处理可以在CYourWnd类中加入消息处理函数。
      

  6.   

    如果你使用MFC的话,举例如下:
    (1)在DLL中写一个类CYourWnd继承CWnd;
    (2)定义全局变量CYourWnd *g_pWnd;
    (3)DLL的export函数:
    _declspec(dllexport) void DllShowWindow(HWND hWndParent)
    {
        ......
        g_pWnd = new CYourWnd(......);
        if(g_pWnd == NULL) return;
        CWnd *pWndParent = CWnd::FromHandle(hWndParent);
        if(g_pWnd->Create(......, pWndParent, ......))
            g_pWnd->ShowWindow(SW_SHOW);
        ......
    }
    (4)DLL的ExitInstance()中:
    if(g_pWnd != NULL)
    {
        HWND hWnd = g_pWnd->GetSafeHwnd();
        if((hWnd != NULL) && (::IsWindow(hWnd)))
            g_pWnd->DetroyWindow();    delete g_pWnd;
    }
    (5)该窗口的消息处理可以在CYourWnd类中加入消息处理函数。
      

  7.   

    如果你使用MFC的话,举例如下:
    (1)在DLL中写一个类CYourWnd继承CWnd;
    (2)定义全局变量CYourWnd *g_pWnd;
    (3)DLL的export函数:
    _declspec(dllexport) void DllShowWindow(HWND hWndParent)
    {
        ......
        g_pWnd = new CYourWnd(......);
        if(g_pWnd == NULL) return;
        CWnd *pWndParent = CWnd::FromHandle(hWndParent);
        if(g_pWnd->Create(......, pWndParent, ......))
            g_pWnd->ShowWindow(SW_SHOW);
        ......
    }
    (4)DLL的ExitInstance()中:
    if(g_pWnd != NULL)
    {
        HWND hWnd = g_pWnd->GetSafeHwnd();
        if((hWnd != NULL) && (::IsWindow(hWnd)))
            g_pWnd->DetroyWindow();    delete g_pWnd;
    }
    (5)该窗口的消息处理可以在CYourWnd类中加入消息处理函数。