一: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);不行。