我想在对话框中用一个256色的BMP文件作背景,
若该256色文件的ID为IDB_BITMAP3,
先建一个基于对话框的程序,仅仅重载了Onpaint()函数如下:
然后在该对话框上放置了一个CButton控件,ID为ID_BUTTON1,
编译通过运行之,则发现第一次运行时,该ID_BUTTON1存在于窗口中
但当再次调用该函数时,由于“背景重画”,ID_BUTTON1被冲掉了,
却再也“显示不出来了”,请问,看样才能保证每次调用OnPaint()
达到”既重画IDB_BITMAP3,又重画ID_BUTTON1“目的?注意:各位网友在调试时先建立一个基于对话框的程序,
将c:\windows\Forest.bmp加入到当前工程的BMP资源中,ID为IDB_BITMAP3
先在对话框内放一CButton控件,该CButton控件放于窗口左上角
然后重载OnPaint() ,编译运行后发现CButton控件存在,
这时我们不要关闭本程序窗口,
这时我们打开“资源管理器”,让资源管理器“最大化”,
然后“最小化”,这时我们再看看桌面上本程序窗口中的CButton控件不在了?我的要求是:不破坏我的这个程序思路来解决这个问题(即仅在这个函数中修改或添加一些代码)void CAaaDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
CClientDC dc(this);
CDC memDC;
CBitmap bitmap;
BITMAP bmp;
bitmap.LoadBitmap(IDB_BITMAP3);
bitmap.GetObject (sizeof(BITMAP),&bmp);
memDC.CreateCompatibleDC (&dc);
memDC.SelectObject (bitmap);
dc.BitBlt (0,0,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY);
//memDC.DelObject (bitmap);
GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE); }
//AfxMessageBox("ddd");
}
解决方案 »
- 请教,for(i=0;i<10;i++)为什么会执行11次?
- Afxmessagebox问题
- 如何在线程中向不同的对话框发送消息。
- 关于isapi处理虚拟页面的问题
- 谁能分析??点击一个按钮并出现按钮上的图案!!!
- 请问如何获得硬盘的ID 最好有样例!
- 查询TreeView控件中当前项目在根项目中的序号的消息是什么?
- 一个mp3搜索软件的思路
- 谈谈vc++中有关宏的讨论!
- 在书店看到两种vc技术内幕。有什么区别?
- CAboutDlg,CMainFrame,CPP1App,CPP1Doc,CPP1View,这些类都各是有什么用?
- bool(true,false)和BOOL(TRUE,FALSE)的区别?
我也想到这个办法了,但是我的思路是有特定用途的。
若按你所说, 哪么放在图像上的按纽的颜色是默认的(即是灰色的)
而我要求的是这个按纽是“透明的”,也就是说按纽的表面是背景色,
但按纽的文字可以是指定的颜色,如RGB(255,0,0)