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)
在线程里调用就出现这个错误提示,请问这是什么原因?

解决方案 »

  1.   

    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;
    }
    为类成员函数, 去掉CMyhDlg::即可
      

  2.   

    QuShi这个你定义成全局的,实现的时候又是类方法??int CMyhDlg::QuShi
      

  3.   

    int QuShi(double m,double n,double v);
    是全局函数