问题是这样的,在对话框OnCtlColor中对SLIDER设置背景,主要是为了和对话框背景一致,成功后,一旦最小化后会出现SIDER控件看不见。在上面点一下又会出来的,最小化时间长一些也不会出现问题,就是一最小化,马上恢复就会看不见控件,求解?HBRUSH CPhotoXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd->GetDlgCtrlID()==IDC_SLIDERFONTSIZE)
{
CRect rect;
CRect clientrect;
GetDlgItem(IDC_SLIDERFONTSIZE)->GetWindowRect(&rect);
GetWindowRect(&clientrect);
//CDC *pDC=GetDC();
CDC memdc;
memdc.CreateCompatibleDC(pDC);
CBitmap bitmap;
int wi=rect.left-clientrect.left;
int hi=rect.top-clientrect.top;
//从资源中载入位图
bitmap.LoadBitmap(IDB_BITMAP1);
memdc.SelectObject(bitmap);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memdc,wi,hi,SRCCOPY);
return (HBRUSH)::GetStockObject(NULL_BRUSH); // 设置背景色
} return hbr;
}
void CPhotoXDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
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; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
CRect rect;
GetClientRect(&rect);
CDC *pDC=GetDC();
CDC memdc;
memdc.CreateCompatibleDC(pDC);
CBitmap bitmap;
//从资源中载入位图
bitmap.LoadBitmap(IDB_BITMAP1);
memdc.SelectObject(bitmap);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
}
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd->GetDlgCtrlID()==IDC_SLIDERFONTSIZE)
{
CRect rect;
CRect clientrect;
GetDlgItem(IDC_SLIDERFONTSIZE)->GetWindowRect(&rect);
GetWindowRect(&clientrect);
//CDC *pDC=GetDC();
CDC memdc;
memdc.CreateCompatibleDC(pDC);
CBitmap bitmap;
int wi=rect.left-clientrect.left;
int hi=rect.top-clientrect.top;
//从资源中载入位图
bitmap.LoadBitmap(IDB_BITMAP1);
memdc.SelectObject(bitmap);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memdc,wi,hi,SRCCOPY);
return (HBRUSH)::GetStockObject(NULL_BRUSH); // 设置背景色
} return hbr;
}
void CPhotoXDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
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; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
CRect rect;
GetClientRect(&rect);
CDC *pDC=GetDC();
CDC memdc;
memdc.CreateCompatibleDC(pDC);
CBitmap bitmap;
//从资源中载入位图
bitmap.LoadBitmap(IDB_BITMAP1);
memdc.SelectObject(bitmap);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
}
解决方案 »
- 通过工具条自动跳转到文件的某一行,如何实现?
- vc项目汉化
- 关于程序的假死问题
- vs2005mfc 中c++连接access,不知道是不是连接字符串出问题了
- VC++中的IHTMLDocument2Ptr->open是干嘛用的
- 老师期末考的一道题 想了半天还是不懂 请教大家
- 如何知道一个应用程序访问了哪些系统文件(如windows历史文件、cookies、注册表键值)?
- 在VC6里面怎么让这段代码编译通过
- 我如何根据一个汉字知道他的UNicode 编码和它的点阵?
- 我的一个程序不知道为什么不能读取class列表,现在classview不能用了,怎么办啊??
- vs2005 setup project如何执行代码?
- 将桌面截图直接投影到两个投影仪上
void CPhotoXDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
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; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CRect rect;
GetClientRect(&rect);
CDC *pDC=GetDC();
CDC memdc;
memdc.CreateCompatibleDC(pDC);
CBitmap bitmap;
//从资源中载入位图
bitmap.LoadBitmap(IDB_BITMAP1);
memdc.SelectObject(bitmap);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
}
}
void CPhotoXDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
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; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC memdc;
memdc.CreateCompatibleDC(dc);
CBitmap bitmap;
//从资源中载入位图
bitmap.LoadBitmap(IDB_BITMAP1);
memdc.SelectObject(bitmap);
dc.BitBlt(0,0,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
}
}
试过你这种方法不行,我觉得应该是Slider控的背景挡住了控件,因为我不要对话框背景的时候也是出现这样的问题。
试过你这种方法不行,我觉得应该不是对话框的背景问题,应该是Slider控件的问题,因为我取消了对话框背景,只留slider控件背景的时候还是一样出现这个问题,估计是slider背景挡了控件,就是不知道怎么解决
试过你这种方法不行,我觉得应该不是对话框的背景问题,应该是Slider控件的问题,因为我取消了对话框背景,只留slider控件背景的时候还是一样出现这个问题,估计是slider背景挡了控件,就是不知道怎么解决
不要再onpaint中刷新!
不要用GetDC获取DC
已经试过了。就是不行。估计不是对话框背景问题,是slider问题,也就是说OnCtlColor里面出问题,挡了slider后我在原位置点击又能显示出来的
我让这个只刷新一次的话,最小化后slider背景不会挡slider控件,不过滑块拖动会有卡痕
http://download.csdn.net/detail/schlafenhamster/4671464
最终解决方法+例子
http://blog.7cdi.com/aaaa/showtopic_126.html谢谢大家的回复。