[求助] [求婚将至] 如何实现对话框窗口点击按钮刷新窗口内容 本帖最后由 guiyang124 于 2010-08-03 18:38:01 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 OnButton1()中调用InvalidateRect不就完了,在OnPaint函数根据条件绘图相对应的图 比如说在未点击按钮之前,在OnPaint中绘制一个东西(是红色的一个图片,窗口里写有 "i love u"),响应函数以后,改变标记,调用InvalidateRect,在OnPaint中绘制另个东西(换了一张图片, 写有"请你嫁给我吧!?".)。 顶楼上的。。直接在OnPaint里面绘制。 VisualEleven,你好,请问你说改变标记,这个标记在哪里定义.谢谢! 可以用一下方法实现:(1)直接往对话框中拖一个Picture控件,然后将bitmap图片画到该控件中就可以了,其中可以定义一个int型变量,然后通过该标记变量来判断接下来将走哪一部,该贴那一副bitmap图片。(2)Picture控件中贴图片的接口可以这样定义:void CTestBitmapShowDlg::ShowGivenBitmap(const UINT nIDPrompt) //传入参数为到如到工程中bitmap的ID{ CRect rect; m_ctrlShowBmp.GetWindowRect(&rect); //获取Picture控件的屏幕坐标 ScreenToClient(&rect); //获取Picture控件的屏幕坐标转化为在其所在父窗口中的客户区坐标 CDC *pDC = GetDC(); CBitmap bitmap; bitmap.LoadBitmap(nIDPrompt); BITMAP bmp; bitmap.GetBitmap(&bmp); CDC dcCompatible; dcCompatible.CreateCompatibleDC(pDC); CBitmap *poldbitmap = dcCompatible.SelectObject(&bitmap); pDC-> TransparentBlt(rect.left, rect.top, rect.Width(), rect.Height(), &dcCompatible, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); //贴图时使用到Picture控件在父窗口中的客户区坐标 dcCompatible.SelectObject(poldbitmap); bitmap.DeleteObject(); ReleaseDC(pDC);} (3)在dlg的OnInitialDialog(), "下一页"按钮的响应函数中,dlg的OnPaint()函数中均要调用上面定义的ShowGivenBitmap(const UINT nIDPrompt)接口(i)dlg的OnInitialDialog():显示初始化的bitmap,并将用作标记的成员变量初始化为1,即m_iNextStepFlag = 1;(ii)"下一页"按钮的响应函数: 对标记变量m_iNextStepFlag进行自加,并显示下一页对应的bitmap;(iii)dlg的OnPaint()函数:调用显示bitmap的接口,以防止在dlg需要刷新的时候bitmap图片被刷掉;------------------------------------------------修正显示bitmap的接口,其实判断该显示哪一张bitmap在该函数中实现,当然要传入标记变量的值m_iNextStepFlag:(比如一共有三页,当然仅仅是点击下一页按钮的时候显示另一张图片)void CTestBitmapShowDlg::ShowGivenBitmap(const int nStep) //传入参数为到如到工程中bitmap的ID{ CRect rect; m_ctrlShowBmp.GetWindowRect(&rect); //获取Picture控件的屏幕坐标 ScreenToClient(&rect); //获取Picture控件的屏幕坐标转化为在其所在父窗口中的客户区坐标 CDC *pDC = GetDC(); CBitmap bitmap; if (nStep == 1)//第一步,显示第一张图片IDB_BITMAP1 { bitmap.LoadBitmap(IDB_BITMAP1); } if (nStep == 2)//第二步,显示第二张图片IDB_BITMAP2 { bitmap.LoadBitmap(IDB_BITMAP2); } if (nStep == 3)//第三步,显示第三张图片IDB_BITMAP3 { bitmap.LoadBitmap(IDB_BITMAP3); } bitmap.LoadBitmap(nIDPrompt); BITMAP bmp; bitmap.GetBitmap(&bmp); CDC dcCompatible; dcCompatible.CreateCompatibleDC(pDC); CBitmap *poldbitmap = dcCompatible.SelectObject(&bitmap); pDC-> TransparentBlt(rect.left, rect.top, rect.Width(), rect.Height(), &dcCompatible, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); //贴图时使用到Picture控件在父窗口中的客户区坐标 dcCompatible.SelectObject(poldbitmap); bitmap.DeleteObject(); ReleaseDC(pDC);} 当然,可以实现循环显示图片,比如总共有三页,当前已到达最后一页,此时应该将翻页的按钮的文字设为“回到首页”,即此时m_iNextStepFlag = 3,如果你女朋友点击“回到首页”按钮,则进入按钮的响应函数,程序中发现m_iNextStepFlag = 3,即已经到了最后一页,则应回到首页,则m_iNextStepFlag重新置为1,然后调用ShowGivenBitmap(m_iNextStepFlag)显示对应的bitmap---------------------------------------------将由标记变量m_iNextStepFlag判断该显示哪一张bitmap放在ShowGivenBitmap()函数中的好处是, 我不要在函数调用的地方来判断,只需要传入标记变量m_iNextStepFlag即可,也就是说在按钮的响应函数中和OnPaint()函数中直接调用ShowGivenBitmap(m_iNextStepFlag)就可以了。 不明白这跟求婚有什么关系?------------------当然是显示LZ向他女朋友求婚所用的煽情的图片喽~祝福一个,预祝LZ马道功成! 求婚的事情是喜事,应该大力支持!我已用VS2008初步地实现了LZ描述的功能,LZ需要代码的话,我可以发给你! void CTestBitmapShowDlg::ShowGivenBitmap(const int nStep) //传入参数为到如到工程中bitmap的ID------------------------------------------------纠错:将贴出的函数代码中的下面一行删除 bitmap.LoadBitmap(nIDPrompt); 大侠, 你可以 发到我 邮箱[email protected].非常感谢! 没有收到,再次确认一下邮箱[email protected]。另外我是通过资源在第一个对话框建立了一个按钮IDC_BUTTON的。在点击了此button之后希望显示第二个图片及文字。但是不知道OnButton1()函数怎么来coding。因为在显示第二个图片的时候,怎么也消除不了按钮IDC_BUTTON。 还是说在第一步就不需要建立IDC_BUTTON。只要求在对话框的某块区域响应鼠标点击消息来实现刷新图片和文字的功能? 还是说在第一步就不需要建立IDC_BUTTON。只要求在对话框的某块区域响应鼠标点击消息来实现刷新图片和文字的功能? 用button思路清晰一点,button就是用来翻页嘛~ 已重新发送,LZ再看看,如果还不行,咱们就站内联系用QQ传吧~ 还是没有收到,确定邮箱地址没有写错,就收到了第一封邮件,但是却没附件。当时我也回复您的邮件。qq联系吧。qq:290377764 以太 。谢谢您的关注。 clistbox实现鼠标左键拖动后,选中listbox的多行数据 DLL里面的窗体怎么调试? faint,今早居然连遇着两个vc2003的bug. 关于 irrlicht 游戏引擎 请问如何判断一个EXCEL文件是否已经被打开 用MFC开发ActiveX控件注册时遇到不少疑惑,请大家帮忙! 新建的数据表怎么不能update? VC++中的DAO问题! 我的分为什么都没了?昨天还190多呢,今天0。 使用installshield中碰到的问题 vc6.0单步调试 除了SQLAPI++,有其他类似这个东西的三方库吗 求助--请高手给一个【学生成绩查询程序】分不够,可再加。。。
直接在OnPaint里面绘制。
(1)直接往对话框中拖一个Picture控件,然后将bitmap图片画到该控件中就可以了,其中可以定义一个int型变量,然后通过该标记变量来判断接下来将走哪一部,该贴那一副bitmap图片。
(2)Picture控件中贴图片的接口可以这样定义:void CTestBitmapShowDlg::ShowGivenBitmap(const UINT nIDPrompt) //传入参数为到如到工程中bitmap的ID
{
CRect rect;
m_ctrlShowBmp.GetWindowRect(&rect); //获取Picture控件的屏幕坐标
ScreenToClient(&rect); //获取Picture控件的屏幕坐标转化为在其所在父窗口中的客户区坐标
CDC *pDC = GetDC();
CBitmap bitmap;
bitmap.LoadBitmap(nIDPrompt);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
CBitmap *poldbitmap = dcCompatible.SelectObject(&bitmap);
pDC-> TransparentBlt(rect.left, rect.top, rect.Width(), rect.Height(), &dcCompatible,
0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); //贴图时使用到Picture控件在父窗口中的客户区坐标
dcCompatible.SelectObject(poldbitmap);
bitmap.DeleteObject();
ReleaseDC(pDC);
}
(i)dlg的OnInitialDialog():显示初始化的bitmap,并将用作标记的成员变量初始化为1,即m_iNextStepFlag = 1;
(ii)"下一页"按钮的响应函数: 对标记变量m_iNextStepFlag进行自加,并显示下一页对应的bitmap;
(iii)dlg的OnPaint()函数:调用显示bitmap的接口,以防止在dlg需要刷新的时候bitmap图片被刷掉;------------------------------------------------修正显示bitmap的接口,其实判断该显示哪一张bitmap在该函数中实现,当然要传入标记变量的值m_iNextStepFlag:(比如一共有三页,当然仅仅是点击下一页按钮的时候显示另一张图片)void CTestBitmapShowDlg::ShowGivenBitmap(const int nStep) //传入参数为到如到工程中bitmap的ID
{
CRect rect;
m_ctrlShowBmp.GetWindowRect(&rect); //获取Picture控件的屏幕坐标
ScreenToClient(&rect); //获取Picture控件的屏幕坐标转化为在其所在父窗口中的客户区坐标
CDC *pDC = GetDC();
CBitmap bitmap;
if (nStep == 1)//第一步,显示第一张图片IDB_BITMAP1
{
bitmap.LoadBitmap(IDB_BITMAP1);
}
if (nStep == 2)//第二步,显示第二张图片IDB_BITMAP2
{
bitmap.LoadBitmap(IDB_BITMAP2);
}
if (nStep == 3)//第三步,显示第三张图片IDB_BITMAP3
{
bitmap.LoadBitmap(IDB_BITMAP3);
}
bitmap.LoadBitmap(nIDPrompt);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
CBitmap *poldbitmap = dcCompatible.SelectObject(&bitmap);
pDC-> TransparentBlt(rect.left, rect.top, rect.Width(), rect.Height(), &dcCompatible,
0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); //贴图时使用到Picture控件在父窗口中的客户区坐标
dcCompatible.SelectObject(poldbitmap);
bitmap.DeleteObject();
ReleaseDC(pDC);
}
---------------------------------------------
将由标记变量m_iNextStepFlag判断该显示哪一张bitmap放在ShowGivenBitmap()函数中的好处是, 我不要在函数调用的地方来判断,只需要传入标记变量m_iNextStepFlag即可,也就是说在按钮的响应函数中和OnPaint()函数中直接调用ShowGivenBitmap(m_iNextStepFlag)就可以了。
------------------
当然是显示LZ向他女朋友求婚所用的煽情的图片喽~祝福一个,预祝LZ马道功成!
------------------------------------------------
纠错:将贴出的函数代码中的下面一行删除 bitmap.LoadBitmap(nIDPrompt);
没有收到,再次确认一下邮箱[email protected]。另外我是通过资源在第一个对话框建立了一个按钮IDC_BUTTON的。在点击了此button之后希望显示第二个图片及文字。但是不知道OnButton1()函数怎么来coding。因为在显示第二个图片的时候,怎么也消除不了按钮IDC_BUTTON。
qq联系吧。qq:290377764 以太 。谢谢您的关注。