1. TextOut输出文字背景颜色与窗口背景颜色不一致:
在OnDraw函数中设置为透明模式
void CPropView::OnDraw(CDC* pDC)
{
CPropDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->SetBkMode(TRANSPARENT);
}
2. 点击菜单显示工具栏,浮动状态从隐藏到再显示的时候,工具栏没有处于原来的位置。
问题代码:
void CMainFrame::OnMytool()
{
// TODO: Add your command handler code here
if (m_newToolBar.IsVisible())
{
m_newToolBar.ShowWindow(SW_HIDE);
GetMenu()->GetSubMenu(2)->CheckMenuItem(IDM_MYTOOL, MF_BYCOMMAND | MF_UNCHECKED);
}
else
{
m_newToolBar.ShowWindow(SW_SHOW);
GetMenu()->GetSubMenu(2)->CheckMenuItem(IDM_MYTOOL, MF_BYCOMMAND | MF_CHECKED);
}
RecalcLayout();//做窗口调整,否则工具条会一直显示
DockControlBar(&m_newToolBar);//停靠工具栏
}
void CMainFrame::OnUpdateMytool(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(1);
}
修改后的代码:
void CMainFrame::OnMytoolbarShow()
{
ShowControlBar(&m_wndMyToolBar, (m_wndMyToolBar.GetStyle()& WS_VISIBLE)==0, FALSE);
}
void CMainFrame::OnUpdateMytoolbarShow(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck((m_wndMyToolBar.GetStyle() & WS_VISIBLE)!=0);
}
3.
MFC 画一个透明矩形
向设备上下文dc选入一个空画刷br和一个红画笔pen即可
简单实例如下:
//CBrush br;
//CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
br.CreateStockObject(NULL_BRUSH);
dc.SelectObject(&pen);
dc.SelectObject(&br);
//dc.Rectangle(1,1,100,100);
4. 设置窗口、对话框的背景
窗口:
BOOL CGrapheView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CBitmap mBmp;
mBmp.LoadBitmap(IDB_BITMAP1);
CDC dc;
BITMAP bt;
mBmp.GetBitmap(&bt);
CRect rect;
GetClientRect(&rect);
dc.CreateCompatibleDC(pDC);
CBitmap *pBmp = (CBitmap *)dc.SelectObject(&mBmp);
pDC->StretchBlt(0, 0, rect.Width(), rect.Height(),
&dc, 0, 0, bt.bmWidth, bt.bmHeight, SRCCOPY);
dc.SelectObject(pBmp);
mBmp.DeleteObject();
return true;
return CView::OnEraseBkgnd(pDC);
}
对话框:
HBRUSH CSetingDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if (pWnd == this)
{
CBrush brs;
pDC->SetBkMode(TRANSPARENT);
brs.CreateStockObject(NULL_BRUSH);
CBitmap bmp;
BITMAP bt;
bmp.LoadBitmap(IDB_BITMAP1);
bmp.GetBitmap(&bt);
CDC cDC;
cDC.CreateCompatibleDC(pDC);
CBitmap* pbmp = (CBitmap*)cDC.SelectObject(&bmp);
CRect rt;
GetWindowRect(&rt);
ScreenToClient(&rt);
pDC->StretchBlt(0, 0, rt.Width(), rt.Height(), &cDC,
0, 0, bt.bmWidth, bt.bmHeight, SRCCOPY);
cDC.SelectObject(pbmp);
bmp.DeleteObject();
return brs;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
5. MFC 文本框 更新数据后如何拉到最下方显示
int length=m_edit1.GetWindowTextLength(); m_edit1.SetSel(length,length); 也可以用 m_edit1.LineScroll(MAXINT_PTR);