const int x=86,y=64;//左上角坐标,绘图用。
double v[805];
int QuShi(double m,double n,double v);
DWORD WINAPI Fun1Proc(LPVOID lpParameter);void CMyhDlg::OnPaint()
{
if (IsIconic())
{
……
}
else
{
BeiJingXian(x,y);
CDialog::OnPaint();
}
}void CMyhDlg::BeiJingXian(int x,int y)//x,y;//图表框左上角初始坐标
{
CDC *p=this->GetDC();
CPen pen;
int x1=x,y1=y;
int cx=x+720,cy=y+300;//右下角坐标
int xjg=72,yjg=30;//各个线条之间的间隔 72为14400/100/2得出的。
int i=0;
pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
::SelectObject(p->GetSafeHdc(),pen);
for(i=0;i<=10;i++)//画10条横坐标线
{
p->MoveTo(x1,y1);
p->LineTo(cx,y1);
y1=y1+yjg;
}
x1=x,y1=y;//图表框左上角初始坐标
for(i=0;i<=10;i++)//画10条纵坐标线
{
p->MoveTo(x1,y1);
p->LineTo(x1,cy);
x1=x1+xjg;
}
pen.DeleteObject(); CString strTemp=_T("");
p->SetBkColor(GetSysColor(COLOR_3DFACE));
int z=x+49;
for(i=1;i<=10;i++)
{
strTemp.Format("%d分钟",i);
p->TextOut(z,y+305,strTemp);
z=z+72;
}
CString strTemp1=_T("");
int cc;
int bfb=100;
cc=y-7;
for(i=1;i<=10;i++)
{
strTemp1.Format("%d%c",bfb,0x25);
p->TextOut(x-40,cc,strTemp1);
cc=cc+30;
bfb=bfb-10;
}
}void CMyhDlg::OnOK()
{
// TODO: Add extra validation here
double m=10.11111,n=-10.22222;
for(int ys=0;ys<=804;ys++)
{
v[ys]=0.0;
}
v[0]=0.0;
v[100]=7.02654;
v[101]=3.02154;
v[102]=1.21548;
v[103]=-5.12548; v[200]=7.02654;
v[201]=3.02154;
v[202]=1.21548;
v[203]=-5.12548; v[300]=7.02654;
v[301]=3.02154;
v[302]=1.21548;
v[303]=-5.12548; v[530]=7.02654;
v[531]=3.02154;
v[532]=1.21548;
v[533]=-5.12548;
HANDLE hTherad1;//创建线程句柄
hTherad1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);//创建线程
CloseHandle(hTherad1);//关闭线程}int CMyhDlg::QuShi(double m, double n, double v)//参数说明:上限、下限、当前值.输入一个测点数值,输出一个Y坐标点
{
double bfz=0.0;
double bfb=0;
bfz=(double)((v)-(n))/((m)-(n));
bfb=(double)bfz*((y)-((y)+300))+((y)+300); //CString d;
// d.Format("%d",(int)bfb);
// MessageBox(d);
return (int)bfb;
}DWORD WINAPI Fun1Proc(LPVOID lpParameter)//线程函数1
{
//CDC *p=this->GetDC();
HDC hdc;
hdc=::GetDC(NULL);
CPen pen,pen1;
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
::SelectObject(hdc,pen);
int xx=x, cc=0;
MoveToEx(hdc,xx,QuShi(20.11111,-10.22222,v[0]),NULL);
for(;xx<=805;xx++)
{
LineTo(hdc,xx,QuShi(20.3215,-10.142512,v[cc]));
++cc;
Sleep(10);
}
pen.DeleteObject(); return 0;
}
提示如下:--------------------Configuration: myh - Win32 Debug--------------------
Compiling...
myhDlg.cpp
Linking...
myhDlg.obj : error LNK2001: unresolved external symbol "int __cdecl QuShi(double,double,double)" (?QuShi@@YAHNNN@Z)
Debug/myh.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Creating browse info file...myh.exe - 2 error(s), 0 warning(s)我是创建了一个线程,把hdc绘图那部分放进了线程里,在线程里调用了一个我自己写的函数int QuShi(double m,double n,double v)
在线程里调用就出现这个错误提示,请问这是什么原因?
double v[805];
int QuShi(double m,double n,double v);
DWORD WINAPI Fun1Proc(LPVOID lpParameter);void CMyhDlg::OnPaint()
{
if (IsIconic())
{
……
}
else
{
BeiJingXian(x,y);
CDialog::OnPaint();
}
}void CMyhDlg::BeiJingXian(int x,int y)//x,y;//图表框左上角初始坐标
{
CDC *p=this->GetDC();
CPen pen;
int x1=x,y1=y;
int cx=x+720,cy=y+300;//右下角坐标
int xjg=72,yjg=30;//各个线条之间的间隔 72为14400/100/2得出的。
int i=0;
pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
::SelectObject(p->GetSafeHdc(),pen);
for(i=0;i<=10;i++)//画10条横坐标线
{
p->MoveTo(x1,y1);
p->LineTo(cx,y1);
y1=y1+yjg;
}
x1=x,y1=y;//图表框左上角初始坐标
for(i=0;i<=10;i++)//画10条纵坐标线
{
p->MoveTo(x1,y1);
p->LineTo(x1,cy);
x1=x1+xjg;
}
pen.DeleteObject(); CString strTemp=_T("");
p->SetBkColor(GetSysColor(COLOR_3DFACE));
int z=x+49;
for(i=1;i<=10;i++)
{
strTemp.Format("%d分钟",i);
p->TextOut(z,y+305,strTemp);
z=z+72;
}
CString strTemp1=_T("");
int cc;
int bfb=100;
cc=y-7;
for(i=1;i<=10;i++)
{
strTemp1.Format("%d%c",bfb,0x25);
p->TextOut(x-40,cc,strTemp1);
cc=cc+30;
bfb=bfb-10;
}
}void CMyhDlg::OnOK()
{
// TODO: Add extra validation here
double m=10.11111,n=-10.22222;
for(int ys=0;ys<=804;ys++)
{
v[ys]=0.0;
}
v[0]=0.0;
v[100]=7.02654;
v[101]=3.02154;
v[102]=1.21548;
v[103]=-5.12548; v[200]=7.02654;
v[201]=3.02154;
v[202]=1.21548;
v[203]=-5.12548; v[300]=7.02654;
v[301]=3.02154;
v[302]=1.21548;
v[303]=-5.12548; v[530]=7.02654;
v[531]=3.02154;
v[532]=1.21548;
v[533]=-5.12548;
HANDLE hTherad1;//创建线程句柄
hTherad1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);//创建线程
CloseHandle(hTherad1);//关闭线程}int CMyhDlg::QuShi(double m, double n, double v)//参数说明:上限、下限、当前值.输入一个测点数值,输出一个Y坐标点
{
double bfz=0.0;
double bfb=0;
bfz=(double)((v)-(n))/((m)-(n));
bfb=(double)bfz*((y)-((y)+300))+((y)+300); //CString d;
// d.Format("%d",(int)bfb);
// MessageBox(d);
return (int)bfb;
}DWORD WINAPI Fun1Proc(LPVOID lpParameter)//线程函数1
{
//CDC *p=this->GetDC();
HDC hdc;
hdc=::GetDC(NULL);
CPen pen,pen1;
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
::SelectObject(hdc,pen);
int xx=x, cc=0;
MoveToEx(hdc,xx,QuShi(20.11111,-10.22222,v[0]),NULL);
for(;xx<=805;xx++)
{
LineTo(hdc,xx,QuShi(20.3215,-10.142512,v[cc]));
++cc;
Sleep(10);
}
pen.DeleteObject(); return 0;
}
提示如下:--------------------Configuration: myh - Win32 Debug--------------------
Compiling...
myhDlg.cpp
Linking...
myhDlg.obj : error LNK2001: unresolved external symbol "int __cdecl QuShi(double,double,double)" (?QuShi@@YAHNNN@Z)
Debug/myh.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Creating browse info file...myh.exe - 2 error(s), 0 warning(s)我是创建了一个线程,把hdc绘图那部分放进了线程里,在线程里调用了一个我自己写的函数int QuShi(double m,double n,double v)
在线程里调用就出现这个错误提示,请问这是什么原因?
解决方案 »
- 如何获取WIN7系统默认字体
- 怎么让编辑控件不能被用户编辑啊,就是不能输入或删除,但是能用光标选取复制
- 修改COM接口,但访问添加的函数,抛出Access Violation异常。
- 谁有网络校时的代码
- 在线等待关于CList的问题!!
- ~~~~~~~~~~~~~~~~~~~~~~求助~~~~~~~~~~~~~~~~~~~~~~~~
- 菜鸟问一简单的问题:用Picture控件时,我象让Picture的背景为白色,该用什么函数?
- vc中怎么设置点击按钮后打开已经画好的窗口?
- 重新添加ocx接口
- 如何编程:使某应用程序(如IE)运行后,消除其在[任务栏Taskbar]上的显示?
- 在一个子线程中connect连接到服务器之后只能收发一次吗?
- opengl中如何沿某一方向画圆柱
{
double bfz=0.0;
double bfb=0;
bfz=(double)((v)-(n))/((m)-(n));
bfb=(double)bfz*((y)-((y)+300))+((y)+300); //CString d;
// d.Format("%d",(int)bfb);
// MessageBox(d);
return (int)bfb;
}
为类成员函数, 去掉CMyhDlg::即可
是全局函数