最近在学习Visual C++的MFC编程,参考书是孙鑫的《VC++深入详解》第三版。在学习到第十一章绘图的时候,出现了一些问题。
创建了一个对话框,然后在对话框中设置了一个组框并在里面放了三个单选按钮。
选择对应按钮的时候就将CPen对象设置为对应的线型,因为单选按钮分别返回的是0,1,2;而对应的线型PS_SOLID、PS_DASH、PS_DOT分别对应的也是0、1、2,所以在设置的时候只要使用成员变量m_nLineStyle就行了。
void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
CPen pen(m_nLineStyle, m_nLineWidth, RGB(255, 0, 0));//直接使用m_nLineStyle来设置线型
dc.SelectObject(&pen);
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pBrush);
switch (m_nDrawType)
{
case 1:
dc.SetPixel(point, RGB(255, 0, 0));
break;
case 2:
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
break;
case 3:
dc.Rectangle(CRect(m_ptOrigin, point));
break;
case 4:
dc.Ellipse(CRect(m_ptOrigin, point));
break;
}
CView::OnLButtonUp(nFlags, point);
}
void CGraphicView::OnSetting()
{
CSettingDlg dlg;
dlg.m_nLineWidth = m_nLineWidth;
dlg.m_nLineStyle = m_nLineStyle;//记住上次单选按钮的选择
if (IDOK == dlg.DoModal())
{
m_nLineWidth = dlg.m_nLineWidth;
m_nLineStyle = dlg.m_nLineStyle;//将单选按钮的返回值赋值给视类的成员变量m_LineStyle
}
}
但是运行后不管怎么选择,画出来的线都是实线。于是我就设置断点,观察m_nLineStyle变量的值是多少。
可以看到选择虚线的时候确实被赋值为了1,但是画线还是实线。于是我直接用代码CPen pen(1, m_nLineWidth, RGB(255, 0, 0));试了一下,发现确实变成了虚线,那为什么用变量就不行呢?
最后,我将我的代码打包发给了我朋友,他打开直接运行,代码并没有问题,在他那里可以选择线型并画图,但是我的电脑却不行。
所以,我晕了QAQ,而且我在VC6.0里面,同样也是不行。
对不起兄弟们,破案了,虚线和点线的线宽只能是1,因为我修改了线宽,所以一直显示的直线,线宽设置为1就没事了。。。。。。太丢人了