MFC中,对话框模式,通过EDIT控件输入x,y位置,使用dc.textout在相应位置,输出字符没有显示。代码如下
voidCPoint_interfaceDlg::OnPaint(){if(IsIconic()){CPaintDCdc(this);//devicecontextfor...
void CPoint_interfaceDlg::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
{
CPaintDC dc(this);
dc.SetTextColor(RGB(255,255,255));//描点颜色为黑色
dc.SetBkMode(TRANSPARENT);//背景设置为透明
CRect rect;//矩形类声明
rect.left=30;//矩形左宽度
rect.right=450;
rect.top=15;
rect.bottom=185;
dc.Rectangle(&rect);//矩形指向rect变量
dc.FillRect(&rect,&m_brush);//用brush1格式刷
UpdateData(TRUE);
if((x!=NULL)&&(y!=NULL))
{
UpdateWindow();
dc.TextOut(9,9,"ff");//字符水平(Widtix)输出
dc.LineTo(x,y);//这两行没有在对话框中显示!!!!!!!!!!!!!
}
}
}
其中,x,y为横纵坐标位置,Debug时,数据正常传入,但dc.textout函数和dc.lineto函数貌似都没有执行。求指教!!!!!! 展开
{
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
{
CPaintDC dc(this);
dc.SetTextColor(RGB(255,255,255));//描点颜色为黑色
dc.SetBkMode(TRANSPARENT);//背景设置为透明
CRect rect;//矩形类声明
rect.left=30;//矩形左宽度
rect.right=450;
rect.top=15;
rect.bottom=185;
dc.Rectangle(&rect);//矩形指向rect变量
dc.FillRect(&rect,&m_brush);//用brush1格式刷
UpdateData(TRUE);
if((x!=NULL)&&(y!=NULL))
{
UpdateWindow();
dc.TextOut(9,9,"ff");//字符水平(Widtix)输出
dc.LineTo(x,y);//这两行没有在对话框中显示!!!!!!!!!!!!!
}
}
}
其中,x,y为横纵坐标位置,Debug时,数据正常传入,但dc.textout函数和dc.lineto函数貌似都没有执行。求指教!!!!!! 展开
1个回答
展开全部
dc.Rectangle(&rect);//矩形指向rect变量
dc.FillRect(&rect,&m_brush);//用brush1格式刷
// if((x!=NULL)&&(y!=NULL))
// {
dc.TextOut(9,9,"ff");//字符水平(Widtix)输出
dc.MoveTo(rect.TopLeft());
dc.LineTo(x,y);//这两行没有在对话框中显示!!!!!!!!!!!!!
// }
//UpdateWindow();去掉,不应该在OnPaint中这样做
//UpdateData(TRUE);
另外,自己注意,x和y在else条件下应该在进入刷新之前updatedata,而且NULL的判断并不适合数值型变量
dc.FillRect(&rect,&m_brush);//用brush1格式刷
// if((x!=NULL)&&(y!=NULL))
// {
dc.TextOut(9,9,"ff");//字符水平(Widtix)输出
dc.MoveTo(rect.TopLeft());
dc.LineTo(x,y);//这两行没有在对话框中显示!!!!!!!!!!!!!
// }
//UpdateWindow();去掉,不应该在OnPaint中这样做
//UpdateData(TRUE);
另外,自己注意,x和y在else条件下应该在进入刷新之前updatedata,而且NULL的判断并不适合数值型变量
追问
dc.MoveTo(rect.TopLeft());添加这一行也没用,调试的时候其实由edit控件输入的数据是接收到了,而且if语句也通过了,但是画线函数和字符输出的两个命令貌似没有执行
追答
你原来的肯定不执行。updatewindow不能这么调用。
另外注意画笔颜色,不过我觉得这不是关键。
可以尝试注销前面的矩形填充代码看看。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询