2014-01-11 9 views
2

Я не знаю, почему я получаю эти две ошибки при запуске кода. Ошибка: аргумент типа BOOL (Movement ::) (HWND__ , LPARAM) 'не соответствует' BOOL () (HWND __ *, LPARAM) ' ошибка: аргумент типа' BOOL (Movement ::) (HWND__) , LPARAM)»не соответствует 'BOOL () (HWND __ *, LPARAM)'Невозможно преобразовать 'TCHAR *' в 'const char *'

файл каст это:

#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

также не забудьте сообщить, где вы получили сообщение об ошибке, так как вы не можете отправить номер строки, используйте комментарий, например: // <- error здесь! – GameDeveloper

ответ

4

Проблема ее е, что EnumWindows ожидает параметр WNDENUMPROC который является ЬурейиМ для

BOOL (*)(HWND, LPARAM); 

В вашем примере коды MyEnumProc имеет типа

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

Разница существует, потому что это метод экземпляра на Movement. Чтобы исправить это, вам нужно сделать MyEnumProc статическим методом

Смежные вопросы