高分求助 我自绘了一个按钮,放在Dialog上,要求按钮的颜色和Dialog一样,Dialog的颜色可变,也是绘制上去的,现在我想取到Dialog背景色涂到按钮上,哪为高手能告诉我怎么取到? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void C***Dlg::OnLButtonDown(UINT nFlags, CPoint point) { //获得设备场景 CDC* pDC = GetDC(); //获得指定点的颜色 COLORREF clr = pDC->GetPixel(point);..... //释放设备场景 ReleaseDC(pDC); CDialog::OnLButtonDown(nFlags, point);} 我现在用的就是GetPixel,但出错的几率很高,比如窗体拖动、置顶窗体覆盖的时候都容易出错,取到的颜色有问题。 在OnPaint完成之后取出来的一定是准的 可以把父窗口的背景拷贝过来就是了//这段代码从一个程序中拷贝过来的,不是按钮用的,不过对按钮也有效,可能需要稍微修改void CTrStatic::ShowText(CDC &pDC){ CRect wndRect; GetWindowRect(&wndRect); CWnd* pParent=GetParent(); pParent->ScreenToClient(&wndRect); CDC dc; CBitmap bitmap; CBitmap* pOldBitmap; dc.CreateCompatibleDC(&pDC); bitmap.CreateCompatibleBitmap(&pDC,wndRect.Width(),wndRect.Height()); pOldBitmap=dc.SelectObject(&bitmap); dc.BitBlt(0,0,wndRect.Width(),wndRect.Height(), pParent->GetDC(), wndRect.left,wndRect.top, SRCCOPY ); CString strDrawText; GetWindowText(strDrawText); CRect textRect; GetClientRect(&textRect); int nOldMode=dc.SetBkMode(TRANSPARENT); CFont *pOldFnt = dc.SelectObject(&m_Fnt); COLORREF OldClr=dc.SetTextColor(RGB(250,250,0)); dc.DrawText(strDrawText,&textRect,DT_CENTER | DT_VCENTER ); textRect.OffsetRect(-1,-1); OldClr=dc.SetTextColor(RGB(0,0,0)); dc.DrawText(strDrawText,&textRect,DT_CENTER | DT_VCENTER ); dc.SetTextColor(OldClr); dc.SetBkMode(nOldMode); dc.SelectObject(pOldFnt); pDC.BitBlt(textRect.left,textRect.top,textRect.Width(),textRect.Height(), &dc,0,0,SRCCOPY); dc.DeleteDC();}如果窗体背景是变化的,那么也对该按钮Invalidate GridCtrl控件求助,要使用CGridCellCombo,单元格下拉列表,如何使用CComboBox::SetCurSel() vc中重绘控件的问题 TCP 的校验? 如何将对话框的Title bar的宽度搞小 COMBOBOX的基础问题 给定一种色彩, 在特定区域以渐变形式绘出. 呼唤高手!急急急! 想骂webprint和test666的请进! 深入浅出MFC的朋友们帮忙! 在MFC中 怎么 声明这个 ZwCreateSection 函数呀? 字符串处理的怪现象,请高手帮忙! 没分散了,请兄弟帮帮忙,急呀
{
//获得设备场景
CDC* pDC = GetDC(); //获得指定点的颜色
COLORREF clr = pDC->GetPixel(point);..... //释放设备场景
ReleaseDC(pDC); CDialog::OnLButtonDown(nFlags, point);
}
//这段代码从一个程序中拷贝过来的,不是按钮用的,不过对按钮也有效,可能需要稍微修改
void CTrStatic::ShowText(CDC &pDC)
{
CRect wndRect;
GetWindowRect(&wndRect); CWnd* pParent=GetParent();
pParent->ScreenToClient(&wndRect); CDC dc;
CBitmap bitmap;
CBitmap* pOldBitmap; dc.CreateCompatibleDC(&pDC); bitmap.CreateCompatibleBitmap(&pDC,wndRect.Width(),wndRect.Height());
pOldBitmap=dc.SelectObject(&bitmap); dc.BitBlt(0,0,wndRect.Width(),wndRect.Height(),
pParent->GetDC(),
wndRect.left,wndRect.top,
SRCCOPY
);
CString strDrawText;
GetWindowText(strDrawText);
CRect textRect;
GetClientRect(&textRect); int nOldMode=dc.SetBkMode(TRANSPARENT);
CFont *pOldFnt = dc.SelectObject(&m_Fnt); COLORREF OldClr=dc.SetTextColor(RGB(250,250,0));
dc.DrawText(strDrawText,&textRect,DT_CENTER | DT_VCENTER );
textRect.OffsetRect(-1,-1);
OldClr=dc.SetTextColor(RGB(0,0,0));
dc.DrawText(strDrawText,&textRect,DT_CENTER | DT_VCENTER );
dc.SetTextColor(OldClr); dc.SetBkMode(nOldMode);
dc.SelectObject(pOldFnt); pDC.BitBlt(textRect.left,textRect.top,textRect.Width(),textRect.Height(),
&dc,0,0,SRCCOPY); dc.DeleteDC();}如果窗体背景是变化的,那么也对该按钮Invalidate