在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<count;i++)
dc.LineTo(rect.right/2+x1[count],rect.bottom/2-y1[count]);
}
}

在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为父类的全局变量

温馨提示:内容为网友见解,仅供参考
无其他回答

用mfc写了一个基于单文档的程序,在vc里面运行很好没有错误,可是为什么...
简单的说用了 使用 动态链接MFC VC外EXE:不正确 VC里运行:正确 静态链接MFC VC外EXE:正确 VC里运行:不正确 静态链接库(lib)与动态链接库(dll)的比较:首先,静态链接库与动态链接库都是共享代码的方式,也可称为程序模块化的方式;静态链接库:lib中的指令都被直接包含在最终的EXE中,因此exe...

如何在MFC中写猜数字游戏,基于对话框的,步骤和代码,我只有这么多悬赏财...
MFC中开线程确实是个麻烦的问题,最大的问题在于开出来的线程函数不能直接使用MFC的一些机制,比如一个基于对话框工程,dlgcpp中写了一个线程函数,那么这个函数不能使用当前dlg类的所有成员,函数,所以直接调用控件变量是不行的,另外获取指针的方法也不行,只有在MFC类的成员函数中才能使用GetDlgItem(IDC...

关于mfc页面重绘的问题,在定时器里调用了自己写的画图函数,用来画实 ...
你如果只写了一个定时器,那么不需要在ontimer里判断是否为1,多余的;然后如果没有被清理,那么你可以自己写一个在调用OnPaint函数之前的一个清理的函数,希望可以帮助你~~~

MFC Ontimer事件处理!
首先绘图不要放在OnBnClickedButton1中,在这个函数中处理Timer。static bool bStart = true;if(bStart)SetTimer(1212,1000,NULL);else KillTimer(1212);bStart = !bStart;绘图一般最好放在OnPaint中,你要放在OnTimer也行。你说的连连看,我觉得可以这样,class Image : public CWnd;图片控件,显示...

请问MFC下如何获取(模态)对话框的CDC
程序出错,首先得从自身找原因 你可以想一下,你的对话框窗口都没有创建,相当于这个东西还不存在,你怎么能从里面取得东西呢?还有就是如果你是想在对话框中显示文字,应该首先调用DoModal()显示出来对话,然后在对话框类的OnPaint()函数中用TextOut()显示文字,如果你想实时刷新,可以采用定时器的...

mfc中static控件显示时间闪烁
在MFC中用缓存技术进行绘图完全可以做到不闪烁,下面是在对话框应用程序OnPaint函数else分支中的代码,显示一行文本,仅用来测试:CWnd * pWndShow;CDC * pDCShow;pWndShow = GetDlgItem(IDC_STC_DRAW); \/\/ static text控件ID pDCShow = pWndShow->GetDC();CDC memDC;CRect rect;CBitmap ...

C++ MFC对话框初始化完成(即所有的控件已经创建完成)后的第一个函数是...
另一种情况如果想在对话框显示出来以后延迟一定时间(不知道我有没有理解对)再添加文本,那就要略微复杂一点了,最简单的方法是用定时器,在OnInitDialog或者OnShowWindow里面SetTimer( 1 , 200 , NULL );然后给对话框添加OnTimer消息,OnTimer( UINT nIdEvent ){ if(nIdEvent ==1 ){ AddString()...

C++ MFC如何在对话框上画动态图 画图
void CMFCApplication2Dlg::OnPaint(){if (IsIconic()){\/\/...else{CPaintDC dc(this); \/\/ device context for paintingCPoint Pt[7];Pt[0] = CPoint(20+m_incr, 50);Pt[1] = CPoint(180+m_incr, 50);Pt[2] = CPoint(180+m_incr, 20);Pt[3] = CPoint(230+m_incr, 70)...

MFC在对话框domodal()显示后,如何自动关闭该对话框,不能用鼠标键盘等...
在DoModal弹出的对话框的定时器WM_TIMER响应函数OnTimer中调用CDialog::OnOK();在该对话框的OnInitDialog中SetTimer(1,5000,NULL); 启动定时器即可。

mfc中打开窗口弹出密码对话框
建立一个模态窗口(假如起名叫pwdDlg),里面放个CEdit,把CEdit的Password属性改成True.然后在弹出你那个窗口的之后用pwdDlg.Domodel()就行了

相似回答
大家正在搜