MFC的作业
- 用规定的颜色绘制正弦、余弦曲线。由菜单或对话框定颜色。
- 这个看起来如此简单的东西耗费了我半天的时间ಥ_ಥ,大部分时间用在了调一个令人无语的bug上。
首先我做了下菜单,包括一个颜色选择菜单(弹出颜色选择对话框),一个模式选择的下拉菜单(画正弦还是画余弦)。
做完菜单以后给它们添加消息处理函数。
颜色选择:
12//修改消息映射函数,添加使用颜色选择公用对话框void CFunctioncurveView::OnInput() { // TODO: Add your command handler code here CFunctioncurveDoc *pDoc = GetDocument(); ASSERT_VALID(pDoc); CColorDialog colordlg(pDoc->m_brush); pDoc->m_brush = RGB(255,0,0); if(colordlg.DoModal()== IDOK) { pDoc->m_brush = colordlg.GetColor(); pDoc->m_boolNew=false; InvalidateRect(NULL); } }模式选择
12//这里我在Document类声明中添加了一个model变量,用它来做选择结构void CFunctioncurveView::OnsinFunc() { // TODO: Add your command handler code here CFunctioncurveDoc *pDoc = GetDocument(); ASSERT_VALID(pDoc); pDoc->model = 0; } void CFunctioncurveView::OncosFunc() { // TODO: Add your command handler code here CFunctioncurveDoc *pDoc = GetDocument(); ASSERT_VALID(pDoc); pDoc->model = 1; }
声明什么的我就不写了,下面是修改OnDraw()成员函数。
小结
这个题用的时间比较长的原因有有两个:第一个问题在于我错误的认为brush是pen,然后搞brush类半天什么也画不出来。还有一个问题就是我在给sin/cos创建消息映射函数的时候把成员函数的名字作死命名为sin/cos,后来将math.h包括进来的时候编译器报错,因为我重复定义了sin和cos……还是很感谢[@Lyeec](http://lyeec.me)帮我找出了问题所在(*_*)