奇怪!高手看过来!

TTJAVA 2003-08-05 03:20:45
RECT rect;
BITMAP bm;
HBITMAP hBitmap;
HDC hSrcDC;
HDC hDesDC;
CWnd *hwnd;
hwnd = GetDlgItem(IDC_PIC);
hDesDC = hwnd->GetDC()->m_hDC;
hSrcDC = CreateCompatibleDC(hDesDC);
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),"e:\\SWPBMP\\default.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
GetObject(hBitmap, sizeof BITMAP, &bm);
SelectObject(hSrcDC, hBitmap);

hwnd->GetClientRect(&rect);
::SetStretchBltMode(hDesDC,COLORONCOLOR);
::StretchBlt(hDesDC, rect.left, rect.top, rect.right,rect.bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,+SRCCOPY);
UpdateData(false);
这段程序在BOOL CXubotestDlg::OnInitDialog()中不能显示图像。
而在void CXubotestDlg::OnButton1()中则可以。
高手解释解释。
...全文
28 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
TTJAVA 2003-08-21
  • 打赏
  • 举报
回复
to lvzhen1109(小屋) :
IDC_PIC是一个控件。text.
这个控件里没有啊。没看到。郁闷!
TTJAVA 2003-08-19
  • 打赏
  • 举报
回复
to cattydid()
我将代码放在WM_PAINT消息的函数里了,还是不行。郁闷!
谢谢大家。
lvzhen1109 2003-08-19
  • 打赏
  • 举报
回复
就是在你的控件的属性里面找到ownerdraw属性,打上勾就可以了
TTJAVA 2003-08-14
  • 打赏
  • 举报
回复
to canany1tellme:
如何设置为自绘方式阿?
cattydid 2003-08-05
  • 打赏
  • 举报
回复
最好的方法是把绘图放在::OnPaint()或::OnDraw等响应WM_PAINT消息的函数里
canany1tellme 2003-08-05
  • 打赏
  • 举报
回复
控件也是一种窗口,所有的窗口中显示的内容都是响应WM_PAINT消息的时候画的,控件自己在处理WM_PAINT,只不过你看不见而已。所以你在外边可以取它的DC,把bitmap贴上去,但是只要它一响应WM_PAINT,就会擦掉你贴上的所有东西。虽然你CXubotestDlg::OnButton1()可以显示bitmap,但是只要发生某个时间让控件窗口的区域失效,还是会被擦掉。

所以最可靠的方法是把控件设置为自绘方式。
TTJAVA 2003-08-05
  • 打赏
  • 举报
回复
ding :0
TTJAVA 2003-08-05
  • 打赏
  • 举报
回复
TO canany1tellme(菜鸟c):
还是不懂,其实你在CXubotestDlg::OnButton1()也不能可靠显示位图?
注意:
IDC_PIC是一个控件。text!
canany1tellme 2003-08-05
  • 打赏
  • 举报
回复
IDC_PIC窗口有自己的WM_PAINT消息响应,在里边会重画。在OnInitDialog里边,IDC_PIC窗口只是Create,而没有ShowWindow和UpdateWindow,你把位图贴上去之后,对话框会UpdateWindow重新用背景色重画IDC_PIC,当然显示不出来。

其实你在CXubotestDlg::OnButton1()也不能可靠显示位图,最好的方法是设置IDC_PIC为owner draw窗口,然后在对话筐自绘响应函数中显示位图。
tigerVC 2003-08-05
  • 打赏
  • 举报
回复
那你可以在文件的直接APP中加入:(就是文件名.CPP)
如:
CJla_centerDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
TTJAVA 2003-08-05
  • 打赏
  • 举报
回复
IDC_PIC是一个text.
我加在CDialog::OnInitDialog();后边。
GZCompiler 2003-08-05
  • 打赏
  • 举报
回复
你加在OnInitDialog函数的什么位置了,因为可能Dialog还没创建好。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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