编译能通过,为何静态文本控件上画不了图?解决思路
编译能通过,为何静态文本控件上画不了图??
我在对话框上添加一个按钮,当单击后生成一个新的对话框,并在新对话框上的一个静态文本控件上划一条线,为何不成功?
下面是单击事件代码,CPic是新对话框类名,IDC_STATIC1是新对话框上的静态文本控件ID号。
void COPENTXTDlg::OnBnClickedPaintbutton()
{
CPic *dlg=new CPic;
dlg-> Create(IDD_PAINTDLG,NULL);
dlg-> ShowWindow(SW_SHOW);
CWnd* pWnd=GetDlgItem(IDC_STATIC1);
ASSERT(pWnd);
CDC* pDC=pWnd-> GetDC();
pDC-> MoveTo(50,30);
pDC-> LineTo(200,200);
ReleaseDC(pDC);
}
------解决方案--------------------
IDC_STATIC1是CPic对话框里面的控件!不是COPENTXTDlg对话框里面的控件!
------解决方案--------------------
IDD_PAINTDLG上有没有IDC_STATIC1?
有的话,吧 CWnd* pWnd=GetDlgItem(IDC_STATIC1);
改成 CWnd* pWnd=dlg-> GetDlgItem(IDC_STATIC1);
------解决方案--------------------
不过我一移动窗口,图形就消失了,如何解决呢
======================================================
一但移动,就会触发WM_PAINT消息,导致重绘控件
CStatic由CWnd继承而来,重载WM_PAINT的消息处理函数OnPaint,在这个函数里面把要画的东西再画一次
------解决方案--------------------
在新对话框中添加public变量:例如:POINT p1, p2;
CPic *dlg=new CPic;
dlg-> Create(IDD_DIALOG1,NULL);
p1.x = 50;
p1.y = 30;
p2.x= p2.y = 200;
dlg-> ShowWindow(SW_SHOW);
在新对话框OnPaint函数:
CPaintDC dc(this); // device context for painting
dc.MoveTo(p1);
dc.LineTo(p2);
也可以直接将主对话框的指针传到新对话框,在新对话框中直接访问主对话框的public变量
我在对话框上添加一个按钮,当单击后生成一个新的对话框,并在新对话框上的一个静态文本控件上划一条线,为何不成功?
下面是单击事件代码,CPic是新对话框类名,IDC_STATIC1是新对话框上的静态文本控件ID号。
void COPENTXTDlg::OnBnClickedPaintbutton()
{
CPic *dlg=new CPic;
dlg-> Create(IDD_PAINTDLG,NULL);
dlg-> ShowWindow(SW_SHOW);
CWnd* pWnd=GetDlgItem(IDC_STATIC1);
ASSERT(pWnd);
CDC* pDC=pWnd-> GetDC();
pDC-> MoveTo(50,30);
pDC-> LineTo(200,200);
ReleaseDC(pDC);
}
------解决方案--------------------
IDC_STATIC1是CPic对话框里面的控件!不是COPENTXTDlg对话框里面的控件!
------解决方案--------------------
IDD_PAINTDLG上有没有IDC_STATIC1?
有的话,吧 CWnd* pWnd=GetDlgItem(IDC_STATIC1);
改成 CWnd* pWnd=dlg-> GetDlgItem(IDC_STATIC1);
------解决方案--------------------
不过我一移动窗口,图形就消失了,如何解决呢
======================================================
一但移动,就会触发WM_PAINT消息,导致重绘控件
CStatic由CWnd继承而来,重载WM_PAINT的消息处理函数OnPaint,在这个函数里面把要画的东西再画一次
------解决方案--------------------
在新对话框中添加public变量:例如:POINT p1, p2;
CPic *dlg=new CPic;
dlg-> Create(IDD_DIALOG1,NULL);
p1.x = 50;
p1.y = 30;
p2.x= p2.y = 200;
dlg-> ShowWindow(SW_SHOW);
在新对话框OnPaint函数:
CPaintDC dc(this); // device context for painting
dc.MoveTo(p1);
dc.LineTo(p2);
也可以直接将主对话框的指针传到新对话框,在新对话框中直接访问主对话框的public变量