求助:dll中对话框加载位图的问题

xiyushouchen 2012-02-21 10:15:02
为什么在dll中用以下语句加载位图不能实现呢?只能正确弹出对话框,但是不能显示图片

DisplayPicture dispicturedlg1;
dispicturedlg1.DoModal();

hbmp = ::LoadBitmap(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
m_displaypicture.SetBitmap(hbmp);
...全文
173 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
firefly3233 2012-02-22
  • 打赏
  • 举报
回复
那你应该响应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;
}
}
}

xiyushouchen 2012-02-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 firefly3233 的回复:]
放到DoModal()之前,对话框还没形成,你怎么能对其上的控件进行操控?
操控模态对话框内控件的代码,一般放在对话框的WM_INITDIALOG消息响应函数里.
[/Quote]

放在对话框的WM_INITDIALOG消息响应函数里只能放初始化代码。
因为现在有两张图片,我需要选择显示哪张,所以我把显示图片1初始化后,就只能显示这一张了
麻烦请看6楼问题描述,谢谢O(∩_∩)O~
Eleven 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiyushouchen 的回复:]
为什么在dll中用以下语句加载位图不能实现呢?只能正确弹出对话框,但是不能显示图片

DisplayPicture dispicturedlg1;
dispicturedlg1.DoModal();

hbmp = ::LoadBitmap(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
m_displaypicture……
[/Quote]
把你的LoadBitmap的那两据代码放到DisplayPicture对话框类的OnInitDialog函数中去。
Saleayas 2012-02-21
  • 打赏
  • 举报
回复
::AfxGetResourceHandle(),
换成 DLL 的 。
xiyushouchen 2012-02-21
  • 打赏
  • 举报
回复
我试过用点击“显示图片”弹出的显示图片的对话框中的显示图片控件的变量,依然不对
DisplayPicture dispicturedlg2;
dispicturedlg2.DoModal();

hbmp = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2));
dispicturedlg2.m_displaypicture.SetBitmap(hbmp);
xiyushouchen 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lgstudyvc 的回复:]
同样的方法,你在非dll里试试看有效果没?
hbmp = ::LoadBitmap(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
m_displaypicture.SetBitmap(hbmp);
[/Quote]

试过,在非dll中是正确的,在非dll的程序中,m_displaypicture是显示图片控件的变量,
但是在现在的dll工程,m_displaypicture是点击显示图片的按钮的变量
lgstudyvc 2012-02-21
  • 打赏
  • 举报
回复
同样的方法,你在非dll里试试看有效果没?
hbmp = ::LoadBitmap(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
m_displaypicture.SetBitmap(hbmp);
firefly3233 2012-02-21
  • 打赏
  • 举报
回复
放到DoModal()之前,对话框还没形成,你怎么能对其上的控件进行操控?
操控模态对话框内控件的代码,一般放在对话框的WM_INITDIALOG消息响应函数里.
xiyushouchen 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 firefly3233 的回复:]
你没有在对话框中"确定"或"取消",也能执行下去?
不会吧?模态对话框不是这样的执行过程呀
[/Quote]

不好意思下午弄错了,我把代码改到了DoModal()前面呵呵,所以能执行
firefly3233 2012-02-21
  • 打赏
  • 举报
回复
你没有在对话框中"确定"或"取消",也能执行下去?
不会吧?模态对话框不是这样的执行过程呀
xiyushouchen 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 firefly3233 的回复:]
DoModal();
是模态对话框显示出来的方法,一但执行此,线程就交给了对话框,除非你在对话框上确定或取消,不然下面的语句不会得到执行.
[/Quote]

调试的时候,DoModal下面的语句可以执行啊
xiyushouchen 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 firefly3233 的回复:]
DoModal();
是模态对话框显示出来的方法,一但执行此,线程就交给了对话框,除非你在对话框上确定或取消,不然下面的语句不会得到执行.
[/Quote]

调试的时候,DoModal下面的语句可以执行啊
firefly3233 2012-02-21
  • 打赏
  • 举报
回复
DoModal();
是模态对话框显示出来的方法,一但执行此,线程就交给了对话框,除非你在对话框上确定或取消,不然下面的语句不会得到执行.
blueskygenius 2012-02-21
  • 打赏
  • 举报
回复
哈哈,原来是你啊。
xiyushouchen 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bragi523 的回复:]
DLL中需要是用它本身资源的时候,切换一下资源句柄
[/Quote]

把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;
}
bragi523 2012-02-21
  • 打赏
  • 举报
回复
DLL中需要是用它本身资源的时候,切换一下资源句柄
xiyushouchen 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bragi523 的回复:]
需要切换资源
HINSTANCE hInstResourceClient = AfxGetResourceHandle();
AfxSetResourceHandle(::GetModuleHandle(_T("Name.dll")));
///使用
AfxSetResourceHandle(hInstResourceClient);
[/Quote]

请教 大侠这个是用在dll的应用程序中的吧?俺的是在dll中的对话框调用的显示图片对话框,两个对话框都在一个dll中O(∩_∩)O~
bragi523 2012-02-21
  • 打赏
  • 举报
回复
需要切换资源
HINSTANCE hInstResourceClient = AfxGetResourceHandle();
AfxSetResourceHandle(::GetModuleHandle(_T("Name.dll")));
///使用
AfxSetResourceHandle(hInstResourceClient);
xiyushouchen 2012-02-21
  • 打赏
  • 举报
回复
这样是可以显示位图,但是因为我有两个IDB_BITMAP1和IDB_BITMAP2,需要进行选择显示
我把那两句放到DisplayPicture对话框类的OnInitDialog函数中以后,不管我选择哪个radio button,都只是显示IDB_BITMAP1诶

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧