无法将'TCHAR*'转换为'const char*'

Cannot convert 'TCHAR*' to 'const char*'

本文关键字:const char 转换 TCHAR      更新时间:2023-10-16
我不知道

为什么在运行代码时会出现这两个错误。错误:类型为"BOOL (Movement::)(HWND__, LPARAM)"的参数与"BOOL ()(HWND__*, LPARAM)"不匹配错误:类型为"BOOL (Movement::)(HWND__, LPARAM)"的参数与"BOOL ()(HWND__*, LPARAM)"不匹配

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: %sn"), 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

这里的问题是EnumWindows期待一个WNDENUMPROC参数,该参数是 typedef

BOOL (*)(HWND, LPARAM);

在代码示例中,MyEnumProc具有以下类型

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

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