关于windowsAPI 在窗口中绘制sin(x)图像的问题

oiooooio 2011-04-25 08:27:27
HDC PaintSin(HDC hdc,HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
RECT rect;
int i=0;
POINT pt[NUM];
TCHAR buffer[30];

GetClientRect(hwnd,&rect);
SetViewportOrgEx(hdc,rect.right/2,rect.bottom/2,NULL);
SetTextColor(hdc,RGB(0,255,0));
TextOut(hdc,5,-15,buffer,wsprintf(buffer,TEXT("f(x)=sin(x),(%d,%d)"),rect.right/2,rect.bottom/2));
SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(0,255,0)));

for(i=0;i<NUM;++i)
{
pt[i].y=(int)sin(i*PI/NUM);
pt[i].x=i*rect.right/NUM;
//pt[i].y=(int)(rect.bottom/2*(1-sin(PI*i/100)));
}
Polyline(hdc,pt,NUM);
SetViewportOrgEx(hdc,0,0,NULL);
SetTextColor(hdc,RGB(0,0,0));
DeleteObject(SelectObject(hdc,GetStockObject(BLACK_PEN)));
return hdc;
}

	case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
WL_SaveDC=PaintSin(hdc,hwnd,message,wparam,lparam);
SaveDC(hdc);
PaintLine(hdc,hwnd,message,wparam,lparam);
RestoreDC(hdc,-1);
EndPaint(hwnd,&ps);
return 0;


上面先给出代码。
说明:
1、传参的时候给一个句柄是为了调用他的WM_PAINT能保存hdc,以免另一个函数不显示。
2、写的比较乱,新手。
问题:
1、在这个子涵中,我把坐标放到了窗口的中心,可是,x坐标正常,就是远点右增大,左为负,可是y我发现上为负,下为增,这是为什么,怎么改过来,谢谢。
TextOut(hdc,5,-15,buffer,wsprintf(buffer,TEXT("f(x)=sin(x),(%d,%d)"),rect.right/2,rect.bottom/2));
这句代码,把字符显示到 第一象限了,也就是(+x,+y).
2、不怕朋友笑话,我中专毕业,数学没学好,这是其一,其二是windowsAPI程序设计第五版里的那个GDI映射方式太难搞了,所以忽略了很多,我想问的是,怎么才能把自己的函数图象很好的显示在窗口的中央,我还想写一个数学函数画图程序呢,呵呵。
3、或许你看到了,我调用函数的时候保存hdc,子函数结束之后,要销毁那么多实例,我感觉代码很长很乱,希望听听朋友的看法,谢谢。
4、待补充...
...全文
169 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaopoy 2011-04-27
  • 打赏
  • 举报
回复
http://wenku.baidu.com/view/a7688662caaedd3383c4d3eb.html 4页的那个图 :P
sin在1/2 PI之前是增大的,1/2 PI~ 2/2 PI之间是减小的,是这个问题吗?

朋友们都是初、高中文凭,学医学的里面都有出了个大牛到每年工资按700平方米北京房子发的程序员呢。

把图像显示到窗口的中央,应该即时的获得窗口的height和width,然后在它1/2的地方也作为自己图像的1/2来绘制 /:^]
Lactoferrin 2011-04-25
  • 打赏
  • 举报
回复
把图像画到memory dc中,WM_PAINT时在BitBlt到窗口dc

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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