为什么在dll中用以下语句加载位图不能实现呢?只能正确弹出对话框,但是不能显示图片DisplayPicture dispicturedlg1;
dispicturedlg1.DoModal();hbmp = ::LoadBitmap(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1)); 
m_displaypicture.SetBitmap(hbmp);

解决方案 »

  1.   

    同样的方法,你在非dll里试试看有效果没?
    hbmp = ::LoadBitmap(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));  
    m_displaypicture.SetBitmap(hbmp);
      

  2.   


    试过,在非dll中是正确的,在非dll的程序中,m_displaypicture是显示图片控件的变量,
    但是在现在的dll工程,m_displaypicture是点击显示图片的按钮的变量
      

  3.   

    我试过用点击“显示图片”弹出的显示图片的对话框中的显示图片控件的变量,依然不对
    DisplayPicture dispicturedlg2;
    dispicturedlg2.DoModal();hbmp = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2));
    dispicturedlg2.m_displaypicture.SetBitmap(hbmp);
      

  4.   

    ::AfxGetResourceHandle(),
    换成 DLL 的 。
      

  5.   

    把你的LoadBitmap的那两据代码放到DisplayPicture对话框类的OnInitDialog函数中去。
      

  6.   

    这样是可以显示位图,但是因为我有两个IDB_BITMAP1和IDB_BITMAP2,需要进行选择显示
    我把那两句放到DisplayPicture对话框类的OnInitDialog函数中以后,不管我选择哪个radio button,都只是显示IDB_BITMAP1诶
      

  7.   

    需要切换资源
    HINSTANCE   hInstResourceClient   =   AfxGetResourceHandle();  
    AfxSetResourceHandle(::GetModuleHandle(_T("Name.dll"))); 
    ///使用
    AfxSetResourceHandle(hInstResourceClient);
      

  8.   


    请教 大侠这个是用在dll的应用程序中的吧?俺的是在dll中的对话框调用的显示图片对话框,两个对话框都在一个dll中O(∩_∩)O~
      

  9.   

    DLL中需要是用它本身资源的时候,切换一下资源句柄
      

  10.   


    把Name.dll改成了我生成的dll文件名,把那几句都加在了判断语句里,怎么还是不行呢?请教
    BOOL CMydll0207Dlg::OnDisplayPicture() 
    {
        DisplayPicture dispicturedlg;
        dispicturedlg.DoModal();    HINSTANCE hInstResourceClient = AfxGetResourceHandle();   
        AfxSetResourceHandle(::GetModuleHandle(_T("mydll0207.dll")));  
        AfxSetResourceHandle(hInstResourceClient);    if(((CButton*)GetDlgItem(IDC_STEEL_STYLE_1))->GetCheck())
        {
          HBITMAP hbmp = ::LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));
          m_displaypicture.SetBitmap(hbmp);
        }
        else if(((CButton*)GetDlgItem(IDC_STEEL_STYLE_2))->GetCheck()) 
        {
          HBITMAP hbmp = ::LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2));
          m_displaypicture.SetBitmap(hbmp);
        }
        return TRUE;
    }
      

  11.   

    DoModal();
    是模态对话框显示出来的方法,一但执行此,线程就交给了对话框,除非你在对话框上确定或取消,不然下面的语句不会得到执行.
      

  12.   


    调试的时候,DoModal下面的语句可以执行啊
      

  13.   


    调试的时候,DoModal下面的语句可以执行啊
      

  14.   


    不好意思下午弄错了,我把代码改到了DoModal()前面呵呵,所以能执行
      

  15.   

    放到DoModal()之前,对话框还没形成,你怎么能对其上的控件进行操控?
    操控模态对话框内控件的代码,一般放在对话框的WM_INITDIALOG消息响应函数里.
      

  16.   


    放在对话框的WM_INITDIALOG消息响应函数里只能放初始化代码。
    因为现在有两张图片,我需要选择显示哪张,所以我把显示图片1初始化后,就只能显示这一张了
    麻烦请看6楼问题描述,谢谢O(∩_∩)O~
      

  17.   

    那你应该响应radio控件的BN_CLICKED消息呀:
    重载对话框的OnCommand虚函数:
    BOOL CMydll0207Dlg::OnCommand(WPARAM wParam, LPARAM lParam) 
    {
    if (HIWORD(wParam) == BN_CLICKED)
    {
    UINT uID = LOWORD(wParam);
    CButton* pBtn = (CButton*)GetDlgItem(uID);
    switch (uID)
    {
    case IDC_STEEL_STYLE_1:
    if (pBtn->GetCheck())
    {
    //...
    }
    break;
    case IDC_STEEL_STYLE_2:
    if (pBtn->GetCheck())
    {
    //...
    }
    break;
    }
    }
    }