MFC遇到小问题及解决方法

来源:互联网 发布:程序员简历工作业绩 编辑:程序博客网 时间:2024/06/10 01:22

1. TextOut输出文字背景颜色与窗口背景颜色不一致:

在OnDraw函数中设置为透明模式

void CPropView::OnDraw(CDC* pDC){CPropDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data herepDC->SetBkMode(TRANSPARENT);}


2. 点击菜单显示工具栏,浮动状态从隐藏到再显示的时候,工具栏没有处于原来的位置。

问题代码:

void CMainFrame::OnMytool() {// TODO: Add your command handler code hereif (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 herepCmdUI->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 defaultCBitmap 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 hereif (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 desiredreturn hbr;}

5. MFC 文本框 更新数据后如何拉到最下方显示

int length=m_edit1.GetWindowTextLength();m_edit1.SetSel(length,length); 也可以用m_edit1.LineScroll(MAXINT_PTR);


原创粉丝点击