1.怎样使得基于DIALOG的程序的DIALOG 具有XP的风格??
2.在一个不支持MFC的ATL中,怎样使得它能使用MFC中的类,怎样使得点击ATL中对话框上的按钮,弹出另外一个对话框?
3.MFC的DLL中能不能开线程,一个EXE调用这个DLL能不能把DLL中的对话框显示出来,并实现功能??

解决方案 »

  1.   

    回答第二个问题:
    找一个MFC的工程,将其中的stdafx.h拿来与现有的ATL工程中的
    stdafx.h对比,加上相应的include 语句即可,一般这些语句中包含的文件都是以
    afx开头.
    另外还要设置以下工程的setting,使本工程使用MFC的库
    另外:
    推荐使用WTL来取代MFC
    第三个问题:
    你可以在DLLMain上动一动脑筋
      

  2.   

    1,给你的工程添加manifest,具体可以"manifest"为关键词到msdn.microsoft.com搜索其他问题不擅长。抱歉。
      

  3.   

    1.怎样使得基于DIALOG的程序的DIALOG 具有XP的风格??
       只需要在XP下运行就可。要不就用作skin的方法。2. 干嘛不开始就支持呢?也可以调EXE,DLL啥。
       学学alt向导的生成代码。
    好像要加些
    #include <afxwin.h>
    #include <afxdisp.h>
    之类的头文件。3,在DLL中调用如下函数。
    HINSTANCE AfxGetResourceHandle( );//得到原(exe的HINSTANCE )
    HINSTANCE AfxGetInstanceHandle( );//得到新(dll的HINSTANCE)
    void AfxSetResourceHandle( HINSTANCE hInstResource );//设定缺省的(设为dll的HINSTANCE) 
    然后你的对话框就出得跟EXE一样了。
    使用资源完后,最后再恢复,调用void AfxSetResourceHandle( HINSTANCE hInstResource ); //exe的HINSTANCE 
      

  4.   

    to hujun614:
    1.我的Dialog不仅仅在WIN XP下运行,而且要在98,2000下运行.
    怎样做skin
      

  5.   

    自己从新做一个dialog 的类....自己画一下吧....很好做的..
      

  6.   

    有例子吗
    [email protected]
    Thanks
      

  7.   

    有个控件叫active skin。

    http://www.softpile.com/Development/ActiveX/Review_02223_index.html去看看吧。那是一个ActiveX控件。做界面很不错。其实你的窗口可以自已处理所有的重绘消息。就可以按自已的方式画界面了。
      

  8.   

    至于问题1:
    在上找www.vckbase.com第13期。
    其它问题不想动脑筋,其实ATL我不会
      

  9.   

    3. http://www.codeguru.com/dll/dialog_in_dll.shtml
    you can create thread in dll, but don't create thread in DllMain.
      

  10.   

    1.http://www.csdn.net/Develop/Read_Article.asp?Id=14167
    我很菜的,你的问题我都答不出来,但是刚才才看到一个就是关于XP界面的Dialog的文章,推荐看看:)
      

  11.   

    第三个问题:
    DLL中可以开线程,方法与一般程序中一样,定义一出口函数,用AfxBeginThread;在调用的时候加载该DLL
      

  12.   

    DLLMain里可以创建线程的BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  fdwReason, 
                           LPVOID lpReserved
     )
    {
    switch(fdwReason)
    {
    case DLL_PROCESS_ATTACH://&Ecirc;×&acute;&Icirc;×°&Ocirc;&Oslash;DLL&pound;&not;&acute;&acute;&frac12;¨&Ograve;&raquo;&Iuml;&szlig;&sup3;&Igrave;
    {
    DWORD dwThreadID;
    hThreadHandle = CreateThread(NULL, 0, (unsigned long (__stdcall *)(void *))ThreadProc, NULL, 0, &dwThreadID);
    }
    break;
    case DLL_PROCESS_DETACH:
    {

    if(hThreadHandle)
    TerminateThread(hThreadHandle,0);
    } break;
    case DLL_THREAD_ATTACH:
    break;
    case DLL_THREAD_DETACH:
    break;

        return TRUE;
    }
      

  13.   

    问题1:
    www.vckbase.com第13期上有,方法是重画界面
      

  14.   

    我来答第3问.
    可以实现你的功能的.__declspec( dllexport ) int ShowDialog();
    int ShowDialog()
    {
        CMyDialog Dlg;
        return Dlg.Domodal();
    }把CMyDialog的头文件和实现加到工程中.在一开始#include "MyDialog.h".