作业帮 > 综合 > 作业

在mfc中基于对话框的static控件范围内绘制直线,为什么没反应呢,我是在OnTimer()函数中激活OnPaint(

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/14 05:51:16
在mfc中基于对话框的static控件范围内绘制直线,为什么没反应呢,我是在OnTimer()函数中激活OnPaint() 的
急!请求帮助.代码如下:(x1[],y1[]存放的是直线各点的坐标
void CMyDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//CDialog::OnPaint();
CRect rect;
GetDlgItem(IDC_STATIC)->GetClientRect(rect); //获取控件相对于对话框的位置
CPaintDC dc(GetDlgItem(IDC_STATIC));
dc.MoveTo(rect.right/2,rect.bottom/2);
for(int i=0;i
在Static中绘图还是使用自绘的Static类比较好,在自绘的类中可以响应OnPaint消息进行绘图.
另外IDC_STATIC是个通用ID.所有的static控件默认都是这个ID,你要使用不同的ID来以示区别.
另:在父窗口下直接在子窗口中作图,不知道能不能绘得起来,没有测试过,你试着改一下ID看看.
再问: ID确实有问题,可改了之后还是不行,网上说在对话框下面的控件里画图应该是可以的吧,请问你说的自绘的Static类指的是什么
再答: 自己添加一个类,它的基类是CStatic。 如 calss CMyStatic : public CStatic { } 然后更改IDC_STATIC的ID,并在它的属性中钩选NOTIFY,再关联一个类型为你改了的类名的变量。那么这个Static就可以自绘了。
再问: 那么在原来类中中声明的全局变量在自定义的类中不能用了,怎么办呢
再答: 在自定义的类中也声明一个变量。然后传进去。 如在CMyStatic中也定义一个变量 int myVar; 并定义一个函数如: void SetVar(int var); 函数过程: void CMyStatic::SetVar(int var) { myVar=var; UpdateWindow(); } 父类中MyStatic的关联变量为CMyStatic m_mystatic; 你可以在父类的过程中调用: m_mystatic.SetVar(abc);//abc为父类的全局变量