2014-01-11 109 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爲靜態方法