代码摘自请教xsc2001大大的一个测试函数,在自己程序里折腾半天还是搞不下,开新帖请教各位~想在IDC_STATIC1的StaticText控件内把CString的文字内容从右边飘到左边,停靠下来。。编译提示:GetDlgItem(IDC_STATIC1)->SetWindowText(strShowText);这行
error C2660: “GetDlgItem”: 函数不接受 1 个参数
error C2227: “->SetWindowTextW”的左边必须指向类/结构/联合/泛型类型 请教各位如何解决,谢谢解答!!!   void RunHorseLight(CString strText, int nSpeed)
  { 
  for(int i = 1; i < strText.GetLength(); i++) 
     { 
 CString strOneWord = strText.Mid(i - 1, 1);//注意这里只是对英文,如果是中文还得另处理,因为中文是两个字节  
 CString strShowText; 
   if(i > 1) strShowText = strText.Left(i - 1); 
                    CString strBlankSpace = L""; 

   for(int j = 0;j < nSpeed - i; j++) 
   strBlankSpace += " ";//用空格补上能看到从右向左跑马灯的效果  
   
   for(int j = nSpeed; j > 0;j--) 
      { 
  CString strMid = strBlankSpace.Left(j);
  strShowText = strShowText + strMid + strOneWord;
  GetDlgItem(IDC_STATIC1)->SetWindowText(strShowText);
  Sleep(600); 
       } 
     } 
  }

解决方案 »

  1.   

    这个不是在UI线程里做的吧,你得把对话框类的指针传递过去
    CYourDlg *p = (CYourDlg *)lParam;
    p->GetDlgItem(IDC_STATIC1)->SetWindowText(strShowText);或者是在OnTimer里面处理就可以了.
      

  2.   

    这个代码段是在哪里定义的?
    GetDlgItem有两个版本
    1.win32 api
    这个版本需要传入窗口的句柄,即GetDlgItem(hDlg, ID_XXX),返回值也是窗口句柄。2.cwnd
    这个版本可在cwnd的所有派生类及派生类的派生类中直接调用。若你的这段函数处在你自己的派生类,那你的函数定义是有问题的。
    若你的函数不是出于一个类,那你的调用是有问题的。
      

  3.   

    楼上说的是对的。你的函数
    void RunHorseLight(CString strText, int nSpeed)改为
    void Cxxx::RunHorseLight(CString strText, int nSpeed)Cxxx是你的函数所在的类
      

  4.   

    void RunHorseLight(CString strText, int nSpeed)
    GetDlgItem用的是win32 api 版本void Cxxx::RunHorseLight(CString strText, int nSpeed)
    GetDlgItem用的是cwnd 版本
      

  5.   

    确实如此。如果你想使用MFC版本的GetDlgItem(),需要使你自定义的类派生自CWnd或其派生类。比如你的类名是ABC,你在定义类的头文件中写上class ABC: public CWnd 就可以正常了。