2014-01-11 112 views
2

我不知道当我运行代码时为什么会出现这两个错误。 (BOOL(Movement ::)(HWND__))参数不匹配'BOOL()(HWND __ *,LPARAM)' error:参数的类型'BOOL(Movement ::)(HWND__ ,LPARAM) ,LPARAM)”不匹配 'BOOL()(HWND __ *,LPARAM)'无法将'TCHAR *'转换为'const char *'

cpp文件是这样的:

#include "movement.h" 
#include <windows.h> 
#include <tchar.h> 
#include <iostream> 

using namespace std; 

#pragma comment(lib, "user32.lib") 

Movement::Movement() 
{ 
    xLoc = 10; 
    yLoc = 50; 
    while(true){ 
      windowHandle = NULL; 
      EnumWindows(MyEnumProc, 0); 

      MoveWindow(windowHandle, getXLoc(), getYLoc(), 1220, 930, false); 
      Sleep(5); 
     } 
} 
BOOL CALLBACK Movement::MyEnumProc(HWND hWnd, LPARAM lParam) 
{ 
    TCHAR title[500]; 
    ZeroMemory(title, sizeof(title)); 

    //string strTitle; 

    GetWindowText(hWnd, title, sizeof(title)/sizeof(title[0])); 

    //_tprintf(_T("Found window: %s\n"), title); 

    //strTitle += title; // Convert to std::string 
    if(_tcsstr(title, _T("Firefox"))) 
    { 
     windowHandle = hWnd; 
     return FALSE; 
    } 
    return TRUE; 
} 
int Movement::getXLoc(){ 
    if(xLoc<70&&yLoc<=30){ 
     xLoc += 1; 
     Sleep(10); 
    }else if(yLoc>30){ 
     xLoc -= 1; 
     Sleep(10); 
    } 
    return xLoc; 
} 
int Movement::getYLoc(){ 
    if(yLoc>10&&xLoc<30){ 
     yLoc -= 1; 
     Sleep(10); 
    }else if(xLoc>=30&&yLoc<70){ 
     yLoc += 1; 
     Sleep(10); 
    } 
    return yLoc; 
} 

这是头文件:

#ifndef MOVEMENT_H 
#define MOVEMENT_H 

#include <windows.h> 
#include <iostream> 

using namespace std; 

class Movement 
{ 
public: 
    Movement(); 
protected: 
    HWND windowHandle; 
    BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam); 
    int xLoc; 
    int yLoc; 
    int getXLoc(); 
    int getYLoc(); 
}; 

#endif // MOVEMENT_H 
+2

我看不出问题标题与问题主体相匹配。该错误与TCHAR无关,它与传递类的函数作为回调有关。 – egur

+0

还记得报告你得到的错误,因为你不能发布行号使用像这样的评论://< - 错误在这里! – GameDeveloper

回答

4

她的问题e是该EnumWindows期待一个WNDENUMPROC参数是用于

BOOL (*)(HWND, LPARAM); 

在您的代码示例MyEnumProc一个typedef已

BOOL (Movement::*)(HWND, LPARAM); 

的差异存在,因为它是在Movement实例方法的类型。要解决此问题,您需要使MyEnumProc为静态方法