MFC学习笔记(四)

一:SetROP2函数的应用,设置绘图模式

默认的绘图模式是R2_COPYPEN,它将像素点复制到显示平面上。R2_NOT绘图模式是将目的位置的像素值取反。

void CMainWindow::OnPaint()
{	
	CPen pen(PS_SOLID,10,RGB(0,255,0));	
	CPaintDC dc(this);
	dc.SelectObject(&pen);
	dc.SetROP2(R2_COPYPEN);
	dc.Rectangle(10,10,100,100);	
	//dc.SetROP2(R2_NOT);
	//dc.Rectangle(0,0,100,100);	
}

当取消注释的行,运行结果为:


从以上可知,白色取反为黑,绿色取反为洋红。


二:在派生CFrameWnd类中正常显示CButton,在OnCreate中创建,在OnPaint中绘制

int CMainWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	m_btn.Create(L"god",BS_DEFPUSHBUTTON|WS_VISIBLE|BS_ICON,CRect(100,100,200,200),this,124);		
	return 0;
}


void CMainWindow::OnPaint()
{	
	ValidateRect(NULL);         //清除WM_PAINT消息
	m_btn.SetState(true);       //按钮按下
	m_btn.SetState(false);	    //按钮弹起	
}
参考阅读:http://tieba.baidu.com/p/428204292?pid=4313820906&cid=0&qq-pf-to=pcqq.c2c

实践证明在OnPaint()中只要有个绘图动作,按钮也能正常显示。虽然不知道为什么,先记下来。如在OnPaint()代码为:

void CMainWindow::OnPaint()
{	
	CPaintDC dc(this);	
}
按钮也能正常显示,但CClientDC dc(this);不行。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值