MFC遇到小问题及解决方法

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);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值