MoveTo(hdc,0,1); //这句话的意思,以及为什么有错误! 给了合理的解释的 就有分!希望大家都看看

surstar 2004-11-03 06:15:23
// 下面这是 一个老问题了,都没有人回答正确,我现在再贴!
#include <windows.h>
#include <math.h>
#define pi 3.14159265359
LONG FAR PASCAL WindowProc(HWND,UINT,WPARAM,LPARAM);
char szProgName[]="ProgName";


int PASCAL WinMain(hInst,hPreInst,lpszCmdLine,nCmdShow)
HINSTANCE hInst,hPreInst;
LPSTR lpszCmdLine;
int nCmdShow;
{
HWND hWnd;
MSG msg;
WNDCLASS WC23SWA;
if(!hPreInst)
{
WC23SWA.lpszClassName=szProgName;
WC23SWA.hInstance=hInst;
WC23SWA.lpfnWndProc=WindowProc;
WC23SWA.hCursor=LoadCursor(NULL,IDC_ARROW);
WC23SWA.hIcon=NULL;
WC23SWA.lpszMenuName=NULL;
WC23SWA.hbrBackground=GetStockObject(WHITE_BRUSH);
WC23SWA.style=CS_HREDRAW|CS_VREDRAW;
WC23SWA.cbClsExtra=0;
WC23SWA.cbWndExtra=0;
if(!RegisterClass(&WC23SWA))
return FALSE;
}

hWnd=CreateWindow(szProgName,"Simple Windows Application",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,(HWND)NULL,(HMENU)NULL,(HANDLE)hInst,(LPSTR)NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,(HWND)NULL,(UINT)NULL,(UINT)NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return(msg.wParam);
}


LONG PASCAL WindowProc(hWnd,messg,wParam,lParam)
HWND hWnd;
UINT messg;
WPARAM wParam;
LPARAM lParam;
{
PAINTSTRUCT ps;
HDC hdc;
int i;
double y;


switch(messg)
{
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
/*------------------------------------*/
MoveTo(hdc,0,1); //这句话的意思,以及为什么有错误!
LineTo(hdc,639,429);
TextOut(hdc,55,20,"<-this is a line",16);
Chord(hdc,550,20,630,80,555,25,625,70);
TextOut(hdc,420,30,"<-this is a Chord",17);


Ellipse(hdc,200,200,275,250);
TextOut(hdc,210,215,"<-this is a Ellipse ",19);

Pie(hdc,300,50,400,150,300,50,300,100);
TextOut(hdc,350,80,"<-this is a pie",15);


//MoveTo(hdc,100,50);
LineTo(hdc,100,350);
//MoveTo(hdc,100,200);
LineTo(hdc,500,200);
//MoveTo(hdc,100,200);


for(i=0;i<400;i++)
{
y=120.0*sin(pi*i*(360.0/400.0/180.0));
LineTo(hdc,i+100,(int)(200.0-y));
}


/*------------------------------------*/

ValidateRect(hWnd,NULL);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd,messg,wParam,lParam));
break;
}
return(0l);
}
...全文
291 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoujiamurong 2004-11-07
  • 打赏
  • 举报
回复
结果是画的三角曲线
zhoujiamurong 2004-11-07
  • 打赏
  • 举报
回复
我不知道你是什么环境,我这里要改好多错,上面是通过的代码windows2000+vc6.0
zhoujiamurong 2004-11-07
  • 打赏
  • 举报
回复
#include <windows.h>
#include <math.h>
#define pi 3.14159265359
LONG FAR PASCAL WindowProc(HWND,UINT,WPARAM,LPARAM);
char szProgName[]="ProgName";


int PASCAL WinMain(HINSTANCE hInst,
HINSTANCE hPreInst,
LPSTR lpszCmdLine,
int nCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS WC23SWA;
if(!hPreInst)
{
WC23SWA.lpszClassName=szProgName;
WC23SWA.hInstance=hInst;
WC23SWA.lpfnWndProc=WindowProc;
WC23SWA.hCursor=LoadCursor(NULL,IDC_ARROW);
WC23SWA.hIcon=NULL;
WC23SWA.lpszMenuName=NULL;
WC23SWA.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//加转换
WC23SWA.style=CS_HREDRAW|CS_VREDRAW;
WC23SWA.cbClsExtra=0;
WC23SWA.cbWndExtra=0;
if(!RegisterClass(&WC23SWA))
return FALSE;
}
hWnd = CreateWindow(szProgName, "Simple Windows Application", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL);
// hWnd=CreateWindow(szProgName,
// "Simple Windows Application",
// WS_OVERLAPPEDWINDOW,
// CW_USEDEFAULT,CW_USEDEFAULT,
// CW_USEDEFAULT,CW_USEDEFAULT,NULL,
// (HMENU)NULL,
// (HANDLE)hInst,0);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,(HWND)NULL,(UINT)NULL,(UINT)NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return(msg.wParam);
}


LONG PASCAL WindowProc(HWND hWnd,UINT messg,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
int i;
double y;


switch(messg)
{
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
/*------------------------------------*/
::MoveToEx(hdc,0,1,NULL); //这句话的意思,以及为什么有错误!
LineTo(hdc,639,429);
TextOut(hdc,55,20,"<-this is a line",16);
Chord(hdc,550,20,630,80,555,25,625,70);
TextOut(hdc,420,30,"<-this is a Chord",17);


Ellipse(hdc,200,200,275,250);
TextOut(hdc,210,215,"<-this is a Ellipse ",19);

Pie(hdc,300,50,400,150,300,50,300,100);
TextOut(hdc,350,80,"<-this is a pie",15);


//MoveTo(hdc,100,50);
LineTo(hdc,100,350);
//MoveTo(hdc,100,200);
LineTo(hdc,500,200);
//MoveTo(hdc,100,200);


for(i=0;i<400;i++)
{
y=120.0*sin(pi*i*(360.0/400.0/180.0));
LineTo(hdc,i+100,(int)(200.0-y));
}


/*------------------------------------*/

ValidateRect(hWnd,NULL);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd,messg,wParam,lParam));
break;
}
return(0l);
}
konista 2004-11-07
  • 打赏
  • 举报
回复
你的老贴里,代码不都给你改过了吗?
CDC::MoveTo倒是有,
可没有::MoveTo,
你想用得是::MoveToEx
fj_jiangqi 2004-11-07
  • 打赏
  • 举报
回复
MoveTo(hdc,0,1);改MoveToEx(hdc,0,1,NULL);就行了。
-----------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
我在死亡线上苦苦挣扎-度日如年
surstar 2004-11-07
  • 打赏
  • 举报
回复
你们谁可以把上面的代码改正确,我马上结

不要回一写废话 好不好

我问这个问题问了 1个月了,这是我发第三次问了
888atao 2004-11-04
  • 打赏
  • 举报
回复
要用MoveToEx

MoveTo是CDC类的
ndhutu 2004-11-03
  • 打赏
  • 举报
回复
我看到的怎么只有2个参数啊!!!
I_Love_CPP 2004-11-03
  • 打赏
  • 举报
回复
《MSDN》:

Windows 3.x 函数 函数的可移植版本
MoveTo MoveToEx
OffsetViewportOrg OffsetViewportOrgEx
OffsetWindowOrg OffsetWindowOrgEx
ScaleViewportExt ScaleViewportExtEx
ScaleWindowExt ScaleWindowExtEx
SetBitmapDimension SetBitmapDimensionEx
SetMetaFileBits SetMetaFileBitsEx
SetViewportExt SetViewportExtEx
SetWindowExt SetWindowExtEx
SetWindowOrg SetWindowOrgEx
---------------------------------------------------
第一列中的每个函数都返回值,尽管程序代码常常忽略该值。然而,即使不关心返回值,也必须用新的形式替换旧函数调用。Win32 不支持旧函数。
每个 Ex 函数都包含一个指向数据接收位置的附加参数。该函数调用后,此数据提供与相应函数的返回值相同的信息。如果不需要此信息,可将 NULL 传递给该参数。
在 Windows 3.x 下,可以按如下方式编写 MoveTo 函数调用:
MoveTo( hDC, x, y );
在两种 Windows 版本都支持的可移植版本中,MoveTo 调用重新编写如下。注意,MoveToEx 返回的信息被忽略:
MoveToEx( hDC, x, y, NULL );





linxy2002 2004-11-03
  • 打赏
  • 举报
回复
我以前也有跟楼主一样的困惑,总记得以前用过这个函数,但也一直没有解决,很痛苦
linxy2002 2004-11-03
  • 打赏
  • 举报
回复
CDC::MoveTo
CPoint MoveTo( int x, int y );

CPoint MoveTo( POINT point );

Return Value

The x- and y-coordinates of the previous position as a CPoint object.

Parameters

x

Specifies the logical x-coordinate of the new position.

y

Specifies the logical y-coordinate of the new position.
luolovegui 2004-11-03
  • 打赏
  • 举报
回复
确实如此,在msdn里找不到 MoveTo() 的信息,我相信楼上的朋友没有说错,你可以结贴了。
property1 2004-11-03
  • 打赏
  • 举报
回复
没见过 MoveTo (。。。) 代 3 个参数的。

《Windows 程序设计》上 画线
用这样的语句:
MoveToEx (hdc,x1,y1,NULL) ;
LineTo (hdc,x2,y2) ;

见 MSDN

BOOL MoveToEx(
HDC hdc, // handle to device context
int X, // x-coordinate of new current position
int Y, // y-coordinate of new current position
LPPOINT lpPoint // old current position
);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧