关于背景色问题求救! 我创建了一个对话框程序,在对话框上使用了图片作为背景色,然后通过重载OnCtlColor()函数实现CStatic的背景色与对话框背景色一致,然后编译成RELEASE版本,在我的机器上可以正常显示,但我把我的程序拷贝到旁边的机子上就出现了CStatic背景色为原来默认的白色,而没有跟我预料的一样,请问这是怎么回事,该怎么解决?我的机子是Win2K,装有VC,另一台机子为WIN98,没有VC。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建议使用WM_ERASEBKGND重绘背景,这样就不虞有此问题了 在设置对话框的背景色的时候我就是使用该方法的啊我又换了台Win2K的试了一下,好像没有出现原来的问题,但又有新问题出现,其中有个图标好像变了样,好痛苦啊,怎么回事啊 你可能用了gdi的新特性,你最好把那段代码放出来看看 //重载HBRUSH CXTYMp3PlayerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { int Flag; HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); Flag = pWnd->GetDlgCtrlID(); if (Flag == IDC_MODE_AUTOMATICALLY || Flag == IDC_MODE_MANUALLY || Flag == IDC_STATIC || Flag == IDC_PROGRESS) { pDC->SetTextColor(RGB(0,0,0)); hbr = (HBRUSH)GetStockObject(NULL_BRUSH); pDC->SetBkMode(TRANSPARENT); hbr = m_bBrush; } return hbr;}//以下函数实现设置对话框的背景色BOOL CXTYMp3PlayerDlg::SetBitmap(UINT nID){ // BOOL bResult = true; // if(m_pbackground) { // m_pbackground->DeleteObject(); delete m_pbackground; m_pbackground = NULL; } m_pbackground = new CBitmap(); bResult = m_pbackground->LoadBitmap(nID); return bResult;}BOOL CXTYMp3PlayerDlg::OnEraseBkgnd(CDC* pDC) {// TODO: Add your message handler code here and/or call default// SetBitmap(IDB_BACKGROUND); //to collection bitmap information BITMAP bm; CDC dcMem; //to get the bitmap information m_pbackground->GetObject(sizeof(bm),(LPVOID)&bm); //create the device inviroment and select the bitmap dcMem.CreateCompatibleDC(pDC); CBitmap * pBmpOld = (CBitmap *)dcMem.SelectObject(m_pbackground); //get the client area CRect rcClient; GetClientRect(rcClient); pDC->StretchBlt(0,0, rcClient.right-rcClient.left, rcClient.bottom-rcClient.top, &dcMem, 0,0, bm.bmWidth, bm.bmHeight, SRCCOPY); // dcMem.SelectObject(pBmpOld); return TRUE;// return CDialog::OnEraseBkgnd(pDC);}//初始化函数BOOL CXTYMp3PlayerDlg::OnInitDialog(){SetBitmap(IDB_BACKGROUND); //背景图片m_bBrush.CreateStockObject(HOLLOW_BRUSH);//m_bBrush 全局变量} CString format字符串连接异常 求助,,fatal error LNK1180 为什么我编译的DLL用depends能看到N多信息! 文件路径必须这样写吗? C:\\AOSTAR\\AA.DBF mfc基于基本对话模式下如何一开始就使窗口全屏 2个关于数据库编程的小问题 ADO中的多步操作产生错误 请问 关于:List Control 纳闷!???????????????????????????????? 关于线程的问题:我的对话框程序中需要执行线程,可是编译有问题? 怎样用程序获得本机的上网的外部IP,请看具体内容。
我又换了台Win2K的试了一下,好像没有出现原来的问题,但又有新问题出现,其中有个图标好像变了样,好痛苦啊,怎么回事啊
HBRUSH CXTYMp3PlayerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
int Flag;
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
Flag = pWnd->GetDlgCtrlID();
if (Flag == IDC_MODE_AUTOMATICALLY || Flag == IDC_MODE_MANUALLY || Flag == IDC_STATIC
|| Flag == IDC_PROGRESS)
{
pDC->SetTextColor(RGB(0,0,0));
hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
pDC->SetBkMode(TRANSPARENT);
hbr = m_bBrush;
}
return hbr;
}
//以下函数实现设置对话框的背景色
BOOL CXTYMp3PlayerDlg::SetBitmap(UINT nID)
{
//
BOOL bResult = true;
//
if(m_pbackground)
{
//
m_pbackground->DeleteObject();
delete m_pbackground;
m_pbackground = NULL;
}
m_pbackground = new CBitmap();
bResult = m_pbackground->LoadBitmap(nID); return bResult;
}BOOL CXTYMp3PlayerDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
// SetBitmap(IDB_BACKGROUND);
//to collection bitmap information
BITMAP bm;
CDC dcMem; //to get the bitmap information
m_pbackground->GetObject(sizeof(bm),(LPVOID)&bm); //create the device inviroment and select the bitmap
dcMem.CreateCompatibleDC(pDC);
CBitmap * pBmpOld = (CBitmap *)dcMem.SelectObject(m_pbackground); //get the client area
CRect rcClient;
GetClientRect(rcClient); pDC->StretchBlt(0,0,
rcClient.right-rcClient.left,
rcClient.bottom-rcClient.top,
&dcMem,
0,0,
bm.bmWidth, bm.bmHeight,
SRCCOPY);
//
dcMem.SelectObject(pBmpOld);
return TRUE;
// return CDialog::OnEraseBkgnd(pDC);
}
//初始化函数
BOOL CXTYMp3PlayerDlg::OnInitDialog()
{
SetBitmap(IDB_BACKGROUND); //背景图片
m_bBrush.CreateStockObject(HOLLOW_BRUSH);//m_bBrush 全局变量}