使用ShowWindow(SW_HIDE)出问题

sun_darius 2007-07-10 08:49:36
具体代码如下:
BOOL CBLView::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
CDC *pDC = GetDC();

if(WM_RBUTTONDOWN == pMsg->message)
{
RECT rect;
rect.bottom = 475;
rect.left = 580;
rect.right = 635;
rect.top = 450;
POINT point;
GetCursorPos(&point);
if(PtInRect(&rect,point))
{

GetDlgItem(IDC_BUTTON_CHIP)->ShowWindow(SW_HIDE);
Drawbmp(pDC,0,0,800,600);
}

}

return CView::PreTranslateMessage(pMsg);
}
函数主要功能是处理在rect区域鼠标右键的响应事件。GetDlgItem(IDC_BUTTON_CHIP)->ShowWindow(SW_HIDE);总是出错
Debug Assertion Failed
Program:...
File:f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\wingdi.cpp
line:1157

我已经没有多少分了,各位老大讲究些吧,先谢谢了。
...全文
1231 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xue_yang 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sun_darius 的回复:]
问题总算解决了,虽然有点取巧,还是可以接受的,谢谢各位了
[/Quote]
怎么解决的?遇到相同的问题~
sun_darius 2007-07-11
  • 打赏
  • 举报
回复
问题总算解决了,虽然有点取巧,还是可以接受的,谢谢各位了
sun_darius 2007-07-11
  • 打赏
  • 举报
回复
light_sun(将编程进行到底)

不能在视图类里面直接访问和对对话框的控件进行操作

light_sun的想法是正确的,那怎么才能在在单文档中隐藏控件呢



sun_darius 2007-07-11
  • 打赏
  • 举报
回复
还是不可以啊,郁闷
sun_darius 2007-07-10
  • 打赏
  • 举报
回复
还是有问题,我的绘图函数,可能有点乱
void CBLView::Drawbmp(CDC *MDC,int x,int y,int width,int height)
{
CClientDC dc(this);
CDC memdc;
CBitmap bmp,*poldbmp;
memdc.CreateCompatibleDC(&dc);
CRect rect;
GetClientRect(&rect);
bmp.CreateCompatibleBitmap(MDC,rect.Width(),rect.Height());
poldbmp = memdc.SelectObject(&bmp);

memdc.Rectangle(0,0,640,480);

CBitmap bitmap;
bitmap.LoadBitmapA(IDB_BITMAP4 ); //加载的图片资源

CDC memdc2;
memdc2.CreateCompatibleDC(&memdc);
memdc2.SelectObject(&bitmap);

memdc.BitBlt(0,0,640,480,&memdc2,0,0,SRCCOPY);

dc.BitBlt(0,0,rect.Width(),rect.Height(),
&memdc,0,0,SRCCOPY);

dc.SelectObject(poldbmp);
//ReleaseDC(MDC);
}
jasonshark 2007-07-10
  • 打赏
  • 举报
回复
问题应该还是出在GDI上,
把代码改成这样
if(PtInRect(&rect,point))
{
GetDlgItem(IDC_BUTTON_CHIP)->ShowWindow(SW_HIDE);

CDC * pDC = GetDC();
Drawbmp(pDC,0,0,800,600);
ReleaseDC(pDC);
}
sun_darius 2007-07-10
  • 打赏
  • 举报
回复
lzf8977(wind)

CWnd* pWnd = GetDlgItem(IDC_BUTTON_CHIP);
if( pWnd )
{
pWnd- >ShowWindow(SW_HIDE);

}
代码我试过了,pWnd- >ShowWindow(SW_HIDE);还是有错,如果改成AfxMessageBox();是可以的。

回复人:jasonshark(最后一个暑假了...)

断在wingdi里面的
你确定不是Drawbmp(pDC,0,0,800,600);的问题?

如果不添加那句隐藏的代码,程序执行是正常的,Drawbmp();的执行结果也是正确的
Avoid 2007-07-10
  • 打赏
  • 举报
回复
::ShowWindow

用这个函数
sun_darius 2007-07-10
  • 打赏
  • 举报
回复
自己up一下,知道的帮帮忙啊
jasonshark 2007-07-10
  • 打赏
  • 举报
回复
断在wingdi里面的
你确定不是Drawbmp(pDC,0,0,800,600);的问题?
lzf8977 2007-07-10
  • 打赏
  • 举报
回复
CWnd* pWnd = GetDlgItem(IDC_BUTTON_CHIP);
if( pWnd )
{
pWnd->ShowWindow(SW_HIDE);

}
看一下这个能取到窗口吗?
ouyh12345 2007-07-10
  • 打赏
  • 举报
回复
IDC_BUTTON_CHIP是哪的?
有没有判断GetDlgItem(IDC_BUTTON_CHIP)的合法性?
sun_darius 2007-07-10
  • 打赏
  • 举报
回复
我的控件是动态创建的,显示的主视图上,控件的ID号是我自己的宏定义,#define IDC...
我如果只使用数字也是错误的
light_sun 2007-07-10
  • 打赏
  • 举报
回复
不能在视图类里面直接访问和对对话框的控件进行操作
light_sun 2007-07-10
  • 打赏
  • 举报
回复
个人认为是GetDlgItem(IDC_BUTTON_CHIP)->ShowWindow(SW_HIDE);这句的问题

GetDlgItem只有在IDC_BUTTON_CHIP这个ID的控件所在的对话框的类的成员函数里才能正确得到控件的指针,而你的BOOL CBLView::PreTranslateMessage(MSG* pMsg)函数是在视图类的函数里,这样的话应该GetDlgItem(IDC_BUTTON_CHIP)无法得到正确的控件指针,那么后面的ShowWindow(SW_HIDE)也就不可能对了

16,472

社区成员

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

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

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