谁会在对话框上画直线??? 在对话框上画一条直线,要求键盘的左右方向键可以控制其旋转。其中要注意旋转的速度问题和遇到边界反射的问题。呵呵,这个都不会,要不怎么说我菜呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 画线好办,我来搞定: CDC* pdc = GetDC(); CPen newPen(PS_DASHDOTDOT, 2, (COLORREF)0); // 黑色画笔 CPen *pOldPen = pdc->SelectObject (&newPen); pdc->MoveTo (10, 10); pdc->LineTo (110, 40); pdc->SelectObject (pOldPen); sgnaw(李逍遥) ,这个写成函数后在哪里调用??在onpaint()里吗? 不管在哪,只要是在 CWnd 的派生类里,用 CClientDC dc(this); 都可以得到客户区 DC;用 CWindowDC dc(this); 都可以得到窗口 DC;应为 CClientDC 和 CWindowDC 的构在函数只需要提供一个CWnd*就可以了,所以,你在哪都可以画图:) 新建一对话框工程,设为eddyline为CeddylineDlg类添加三个变量:POINT line1;POINT line2;int angle;在CeddylineDlg.cpp文件开始处加入:#include <math.h>在CeddylineDlg::OnInitDialog()函数添加: line1.x=220; line1.y=80; line2.x=80; line2.y=80; jd=0;将CeddylineDlg::OnPaint() 函数里的代码清除,改为:void CeddylineDlg::OnPaint() { CPaintDC dc(this); dc.MoveTo(line1); dc.LineTo(line2);}重载PreTranslateMessage函数:BOOL CeddylineDlg::PreTranslateMessage(MSG* pMsg){ if (pMsg->message == WM_KEYDOWN) { if (pMsg->wParam==VK_RIGHT) { //Invalidate(); angle+=1; if (angle > 360) angle=0; } if (pMsg->wParam==VK_LEFT) { angle-=1; if (angle == 0) angle=360; } line1.x=70*cos(angle*3.14/180)+150; line2.x=70*cos((angle+180)*3.14/180)+150; line1.y=70*sin(angle*3.14/180)+80; line2.y=70*sin((angle+180)*3.14/180)+80; Invalidate(); return true; } return CDialog::PreTranslateMessage(pMsg);}在win2k+vs.net2003调试通过。程序运行后,按左键或右键,屏幕上的直线便绕中点旋转。 我一般这样做:1.在对话框中放一个Bitmap控件,用来确定绘图的位置;2.在OnPaint()中用GetDlgItem(),取重本控件的句柄,然后用GetWindowRect()取得它的位置(注意转成屏幕坐标),最后用Moveto(),LineTo()画线。 byte 转换成 int型 应用程序错误??? 改变鼠标的的显示状态 socket发送和接收顺序执行问题,请高手指点 为什么ShowWindow会出错? 请问怎样知道一个软件是用什么开发的? 关于sokcket通讯的时间延迟问题(我的看法) Emacs下载完成后,但不知怎样用 vc单文档,如何修改首界面 如何遍历桌面上的所有窗口 请问VC中有无像VB中的Split函数功能的函数或方法? 谁用DeviceIoControl格式化过软盘?大家说说.
CPen newPen(PS_DASHDOTDOT, 2, (COLORREF)0); // 黑色画笔
CPen *pOldPen = pdc->SelectObject (&newPen);
pdc->MoveTo (10, 10);
pdc->LineTo (110, 40);
pdc->SelectObject (pOldPen);
这个写成函数后在哪里调用??在onpaint()里吗?
用 CClientDC dc(this); 都可以得到客户区 DC;
用 CWindowDC dc(this); 都可以得到窗口 DC;
应为 CClientDC 和 CWindowDC 的构在函数只需要提供一个CWnd*就可以了,
所以,
你在哪都可以画图:)
为CeddylineDlg类添加三个变量:
POINT line1;
POINT line2;
int angle;
在CeddylineDlg.cpp文件开始处加入:
#include <math.h>
在CeddylineDlg::OnInitDialog()函数添加:
line1.x=220;
line1.y=80;
line2.x=80;
line2.y=80;
jd=0;
将CeddylineDlg::OnPaint() 函数里的代码清除,改为:
void CeddylineDlg::OnPaint()
{
CPaintDC dc(this);
dc.MoveTo(line1);
dc.LineTo(line2);
}
重载PreTranslateMessage函数:
BOOL CeddylineDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam==VK_RIGHT)
{
//Invalidate();
angle+=1;
if (angle > 360)
angle=0;
}
if (pMsg->wParam==VK_LEFT)
{
angle-=1;
if (angle == 0)
angle=360;
}
line1.x=70*cos(angle*3.14/180)+150;
line2.x=70*cos((angle+180)*3.14/180)+150;
line1.y=70*sin(angle*3.14/180)+80;
line2.y=70*sin((angle+180)*3.14/180)+80; Invalidate();
return true;
}
return CDialog::PreTranslateMessage(pMsg);
}
在win2k+vs.net2003调试通过。
程序运行后,按左键或右键,屏幕上的直线便绕中点旋转。
1.在对话框中放一个Bitmap控件,用来确定绘图的位置;
2.在OnPaint()中用GetDlgItem(),取重本控件的句柄,然后用GetWindowRect()取得它的位置(注意转成屏幕坐标),最后用Moveto(),LineTo()画线。