为什么在dll中用以下语句加载位图不能实现呢?只能正确弹出对话框,但是不能显示图片DisplayPicture dispicturedlg1;
dispicturedlg1.DoModal();hbmp = ::LoadBitmap(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
m_displaypicture.SetBitmap(hbmp);
dispicturedlg1.DoModal();hbmp = ::LoadBitmap(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
m_displaypicture.SetBitmap(hbmp);
hbmp = ::LoadBitmap(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
m_displaypicture.SetBitmap(hbmp);
试过,在非dll中是正确的,在非dll的程序中,m_displaypicture是显示图片控件的变量,
但是在现在的dll工程,m_displaypicture是点击显示图片的按钮的变量
DisplayPicture dispicturedlg2;
dispicturedlg2.DoModal();hbmp = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2));
dispicturedlg2.m_displaypicture.SetBitmap(hbmp);
换成 DLL 的 。
我把那两句放到DisplayPicture对话框类的OnInitDialog函数中以后,不管我选择哪个radio button,都只是显示IDB_BITMAP1诶
HINSTANCE hInstResourceClient = AfxGetResourceHandle();
AfxSetResourceHandle(::GetModuleHandle(_T("Name.dll")));
///使用
AfxSetResourceHandle(hInstResourceClient);
请教 大侠这个是用在dll的应用程序中的吧?俺的是在dll中的对话框调用的显示图片对话框,两个对话框都在一个dll中O(∩_∩)O~
把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;
}
是模态对话框显示出来的方法,一但执行此,线程就交给了对话框,除非你在对话框上确定或取消,不然下面的语句不会得到执行.
调试的时候,DoModal下面的语句可以执行啊
调试的时候,DoModal下面的语句可以执行啊
不好意思下午弄错了,我把代码改到了DoModal()前面呵呵,所以能执行
操控模态对话框内控件的代码,一般放在对话框的WM_INITDIALOG消息响应函数里.
放在对话框的WM_INITDIALOG消息响应函数里只能放初始化代码。
因为现在有两张图片,我需要选择显示哪张,所以我把显示图片1初始化后,就只能显示这一张了
麻烦请看6楼问题描述,谢谢O(∩_∩)O~
重载对话框的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;
}
}
}