2013-11-20 3 views
0

저는 작업하고있는 클래스를 향상시켜 왔고 이러한 작업 중 하나는 내 주요 프로젝트에서 실제로 볼 필요가있었습니다. 나는 클래스를 호출 내가 방금 만든 라이브러리를 인스턴스화 할 때 내가 얻을 :Intellisense : "HWND"유형의 인수가 "rawData :: HWND"유형의 매개 변수와 호환되지 않습니다.

인텔리 : 유형 "HWND"의 인수는 유형의 매개 변수 와 호환되지 않습니다 "RAWDATA : HWND"

이를

// register the window for touch instead of gestures 
    rawData::RegisterTouchWindow(hWnd, 0); 

여기의 전체 코드 :

나는 도서관에서 메서드를 호출하고 (오류가 첫 번째 인수 인)이 인수를 통과 할 때 일어나는
//Creates the main window 
int WINAPI WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR lpCmdLine, 
        int nCmdShow) 
{ 

    WNDCLASSEX wcex; 

    wcex.cbSize = sizeof(WNDCLASSEX); 
    wcex.style   = CS_HREDRAW | CS_VREDRAW; 
    wcex.lpfnWndProc = WndProc; 
    wcex.cbClsExtra  = 0; 
    wcex.cbWndExtra  = 0; 
    wcex.hInstance  = hInstance; 
    wcex.hIcon   = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); 
    wcex.hCursor  = LoadCursor(NULL, IDC_ARROW); 
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
    wcex.lpszMenuName = NULL; 
    wcex.lpszClassName = szWindowClass; 
    wcex.hIconSm  = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); 

    if (!RegisterClassEx(&wcex)) 
    { 
     MessageBox(NULL, 
      _T("Call to RegisterClassEx failed!"), 
      _T("Win32 Guided Tour"), 
      NULL); 

     return 1; 
    } 

    hInst = hInstance; // Store instance handle in our global variable 

    // The parameters to CreateWindow explained: 
    // szWindowClass: the name of the application 
    // szTitle: the text that appears in the title bar 
    // WS_OVERLAPPEDWINDOW: the type of window to create 
    // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) 
    // 500, 100: initial size (width, length) 
    // NULL: the parent of this window 
    // NULL: this application does not have a menu bar 
    // hInstance: the first parameter from WinMain 
    // NULL: not used in this application 
    HWND hWnd = CreateWindow(
     szWindowClass, 
     szTitle, 
     WS_OVERLAPPEDWINDOW, 
     CW_USEDEFAULT, CW_USEDEFAULT, 
     800, 600, 
     NULL, 
     NULL, 
     hInstance, 
     NULL 
    ); 

    if (!hWnd) { 
     MessageBox(NULL, 
      _T("Call to CreateWindow failed!"), 
      _T("Win32 Guided Tour"), 
      NULL); 

     return 1; 
    } 
    // register the window for touch instead of gestures 
    /*ERROR HERE*/rawTData::RegisterTouchWindow(hWnd, 0);/*ERROR HERE*/ 

    // the following code initializes the points 
    for (int i=0; i< MAXPOINTS; i++){ 
    points[i][0] = -1; 
    points[i][1] = -1; 
    idLookup[i] = -1; 
    } 

    ShowWindow(hWnd, nCmdShow); 
    UpdateWindow(hWnd); 

    // Main message loop: 
    MSG msg; 
    while (GetMessage(&msg, NULL, 0, 0)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
    return (int) msg.wParam; 
} 

나는 몇몇 웹 사이트를 방문했으며 "this->"를 사용하여 가리키는 변수를 지정하도록 제안했지만 시도 할 때 아무 것도 표시하지 않습니다. 이 상황에 처한 사람이 있는지 여기에있는 이유입니다. 조금이라도 도움을 주시면 감사하겠습니다. 미리 감사드립니다!

는 또한, 여기 내 라이브러리 클래스의 소스입니다 :

#ifndef RAWTOUCHDATA_H 
#define RAWTOUCHDATA_H 

#pragma once 
namespace rawTData 
{ 
//#define __in           __allowed(on_parameter) 
#if (defined(_M_IX86) || defined(_M_IA64) || defined(_M_AMD64)) && !defined(MIDL_PASS) 
#define DECLSPEC_IMPORT __declspec(dllimport) 
#else 
#define DECLSPEC_IMPORT 
#endif 

// 
// Define API decoration for direct importing of DLL references. 
// 
#if !defined(_USER32_) 
#define WINUSERAPI DECLSPEC_IMPORT 
#define WINABLEAPI DECLSPEC_IMPORT 
#else 
#define WINUSERAPI 
#define WINABLEAPI 
#endif 

#ifndef NO_STRICT 
#ifndef STRICT 
#define STRICT 1 
#endif 
#endif /* NO_STRICT */ 

#ifdef __cplusplus 
extern "C" { 
#endif /* __cplusplus */ 

#ifndef WINVER     // Specifies that the minimum required platform is Windows 7. 
#define WINVER 0x0601   // Change this to the appropriate value to target other versions of Windows. 
#endif 

#ifndef _WIN32_WINNT   // Specifies that the minimum required platform is Windows 7. 
#define _WIN32_WINNT 0x0601  // Change this to the appropriate value to target other versions of Windows. 
#endif 

// 
// The following types are guaranteed to be signed and 32 bits wide. 
// 
typedef signed int LONG32, *PLONG32; 

// 
// The following types are guaranteed to be unsigned and 32 bits wide. 
// 
typedef unsigned int ULONG32, *PULONG32; 
typedef unsigned int DWORD32, *PDWORD32; 

#if !defined(_W64) 
#if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 
#define _W64 __w64 
#else 
#define _W64 
#endif 
#endif 

// 
// The INT_PTR is guaranteed to be the same size as a pointer. Its 
// size with change with pointer size (32/64). It should be used 
// anywhere that a pointer is cast to an integer type. UINT_PTR is 
// the unsigned variation. 
// 
// __int3264 is intrinsic to 64b MIDL but not to old MIDL or to C compiler. 
// 
#if (501 < __midl) 

    typedef [public] __int3264 INT_PTR, *PINT_PTR; 
    typedef [public] unsigned __int3264 UINT_PTR, *PUINT_PTR; 

    typedef [public] __int3264 LONG_PTR, *PLONG_PTR; 
    typedef [public] unsigned __int3264 ULONG_PTR, *PULONG_PTR; 

#else // midl64 
// old midl and C++ compiler 

#if defined(_WIN64) 
    typedef __int64 INT_PTR, *PINT_PTR; 
    typedef unsigned __int64 UINT_PTR, *PUINT_PTR; 

    typedef __int64 LONG_PTR, *PLONG_PTR; 
    typedef unsigned __int64 ULONG_PTR, *PULONG_PTR; 

    #define __int3264 __int64 

#else 
    typedef _W64 int INT_PTR, *PINT_PTR; 
    typedef _W64 unsigned int UINT_PTR, *PUINT_PTR; 

    typedef _W64 long LONG_PTR, *PLONG_PTR; 
    typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR; 

    #define __int3264 __int32 

#endif 
#endif // midl64 

// 
// Define API decoration for direct importing system DLL references. 
// 
#if !defined(_NTSYSTEM_) 
#define NTSYSAPI  DECLSPEC_IMPORT 
#define NTSYSCALLAPI DECLSPEC_IMPORT 
#else 
#define NTSYSAPI 
#if defined(_NTDLLBUILD_) 
#define NTSYSCALLAPI 
#else 
#define NTSYSCALLAPI DECLSPEC_ADDRSAFE 
#endif 
#endif 

// 
// Basics 
// 
#ifndef VOID 
#define VOID void 
typedef char CHAR; 
typedef short SHORT; 
typedef long LONG; 
#if !defined(MIDL_PASS) 
typedef int INT; 
#endif 
#endif 

#ifndef WINVER 
#define WINVER 0x0500 
#endif /* WINVER */ 

/* 
* BASETYPES is defined in ntdef.h if these types are already defined 
*/ 
#ifndef BASETYPES 
#define BASETYPES 
typedef unsigned long ULONG; 
typedef ULONG *PULONG; 
typedef unsigned short USHORT; 
typedef USHORT *PUSHORT; 
typedef unsigned char UCHAR; 
typedef UCHAR *PUCHAR; 
typedef char *PSZ; 
#endif /* !BASETYPES */ 

#define MAX_PATH   260 

#ifndef NULL 
#ifdef __cplusplus 
#define NULL 0 
#else 
#define NULL ((void *)0) 
#endif 
#endif 

#ifndef FALSE 
#define FALSE    0 
#endif 

#ifndef TRUE 
#define TRUE    1 
#endif 

#ifndef IN 
#define IN 
#endif 

#ifndef OUT 
#define OUT 
#endif 

#ifndef OPTIONAL 
#define OPTIONAL 
#endif 

#undef far 
#undef near 
#undef pascal 

#define far 
#define near 
#if (!defined(_MAC)) && ((_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)) 
#define pascal __stdcall 
#else 
#define pascal 
#endif 

#if defined(DOSWIN32) || defined(_MAC) 
#define cdecl _cdecl 
#ifndef CDECL 
#define CDECL _cdecl 
#endif 
#else 
#define cdecl 
#ifndef CDECL 
#define CDECL 
#endif 
#endif 

#ifdef _MAC 
#define CALLBACK PASCAL 
#define WINAPI  CDECL 
#define WINAPIV  CDECL 
#define APIENTRY WINAPI 
#define APIPRIVATE CDECL 
#ifdef _68K_ 
#define PASCAL  __pascal 
#else 
#define PASCAL 
#endif 
#elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) 
#define CALLBACK __stdcall 
#define WINAPI  __stdcall 
#define WINAPIV  __cdecl 
#define APIENTRY WINAPI 
#define APIPRIVATE __stdcall 
#define PASCAL  __stdcall 
#else 
#define CALLBACK 
#define WINAPI 
#define WINAPIV 
#define APIENTRY WINAPI 
#define APIPRIVATE 
#define PASCAL  pascal 
#endif 

#ifdef _M_CEE_PURE 
#define WINAPI_INLINE __clrcall 
#else 
#define WINAPI_INLINE WINAPI 
#endif 

#undef FAR 
#undef NEAR 
#define FAR     far 
#define NEAR    near 
#ifndef CONST 
#define CONST    const 
#endif 

typedef unsigned long  DWORD; 
typedef int     BOOL; 
typedef unsigned char  BYTE; 
typedef unsigned short  WORD; 
typedef float    FLOAT; 
typedef FLOAT    *PFLOAT; 
typedef BYTE near   *PBYTE; 
typedef BYTE far   *LPBYTE; 
typedef int near   *PINT; 
typedef int far    *LPINT; 
typedef WORD near   *PWORD; 
typedef WORD far   *LPWORD; 
typedef long far   *LPLONG; 
typedef DWORD near   *PDWORD; 
typedef DWORD far   *LPDWORD; 
typedef void far   *LPVOID; 
typedef CONST void far  *LPCVOID; 

typedef int     INT; 
typedef unsigned int  UINT; 
typedef unsigned int  *PUINT; 

#if(WINVER >= 0x0601) 
#define WM_TOUCH      0x0240 
#endif /* WINVER >= 0x0601 */ 

// 
// Handle to an Object 
// 
#ifdef STRICT 
typedef void *HANDLE; 
#if 0 && (_MSC_VER > 1000) 
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name 
#else 
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name 
#endif 
#else 
typedef PVOID HANDLE; 
#define DECLARE_HANDLE(name) typedef HANDLE name 
#endif 

typedef HANDLE *PHANDLE; 
#ifndef WIN_INTERNAL 
DECLARE_HANDLE   (HWND); 
DECLARE_HANDLE   (HHOOK); 
#ifdef WINABLE 
DECLARE_HANDLE   (HEVENT); 
#endif 
#endif 

typedef const RECTL FAR* LPCRECTL; 
typedef struct tagPOINT 
{ 
    LONG x; 
    LONG y; 
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT; 
typedef struct _POINTL  /* ptl */ 
{ 
    LONG x; 
    LONG y; 
} POINTL, *PPOINTL; 

typedef struct tagSIZE 
{ 
    LONG  cx; 
    LONG  cy; 
} SIZE, *PSIZE, *LPSIZE; 

typedef SIZE    SIZEL; 
typedef SIZE    *PSIZEL, *LPSIZEL; 

typedef struct tagPOINTS 
{ 
#ifndef _MAC 
    SHORT x; 
    SHORT y; 
#else 
    SHORT y; 
    SHORT x; 
#endif 
} POINTS, *PPOINTS, *LPPOINTS; 

#if(WINVER >= 0x0601) 

/* 
* Touch Input defines and functions 
*/ 

/* 
* Touch input handle 
*/ 
DECLARE_HANDLE(HTOUCHINPUT); 

typedef struct tagTOUCHINPUT { 
    LONG x; 
    LONG y; 
    HANDLE hSource; 
    DWORD dwID; 
    DWORD dwFlags; 
    DWORD dwMask; 
    DWORD dwTime; 
    ULONG_PTR dwExtraInfo; 
    DWORD cxContact; 
    DWORD cyContact; 
} TOUCHINPUT, *PTOUCHINPUT; 
typedef TOUCHINPUT const * PCTOUCHINPUT; 

/* 
* Conversion of touch input coordinates to pixels 
*/ 
#define TOUCH_COORD_TO_PIXEL(l)   ((l)/100) 

/* 
* Touch input flag values (TOUCHINPUT.dwFlags) 
*/ 
#define TOUCHEVENTF_MOVE   0x0001 
#define TOUCHEVENTF_DOWN   0x0002 
#define TOUCHEVENTF_UP    0x0004 
#define TOUCHEVENTF_INRANGE   0x0008 
#define TOUCHEVENTF_PRIMARY   0x0010 
#define TOUCHEVENTF_NOCOALESCE  0x0020 
#define TOUCHEVENTF_PEN    0x0040 
#define TOUCHEVENTF_PALM   0x0080 

/* 
* Touch input mask values (TOUCHINPUT.dwMask) 
*/ 
#define TOUCHINPUTMASKF_TIMEFROMSYSTEM 0x0001 // the dwTime field contains a system generated value 
#define TOUCHINPUTMASKF_EXTRAINFO  0x0002 // the dwExtraInfo field is valid 
#define TOUCHINPUTMASKF_CONTACTAREA  0x0004 // the cxContact and cyContact fields are valid 

WINUSERAPI 
BOOL 
WINAPI 
ScreenToClient(
    HWND hWnd, 
    LPPOINT lpPoint); 

WINUSERAPI 
BOOL 
WINAPI 
GetTouchInputInfo(
    HTOUCHINPUT hTouchInput,    // input event handle; from touch message lParam 
    UINT cInputs,       // number of elements in the array 
    PTOUCHINPUT pInputs, // array of touch inputs 
    int cbSize);       // sizeof(TOUCHINPUT) 

WINUSERAPI 
BOOL 
WINAPI 
CloseTouchInputHandle(
    HTOUCHINPUT hTouchInput);     // input event handle; from touch message lParam 

/* 
* RegisterTouchWindow flag values 
*/ 
#define TWF_FINETOUCH  (0x00000001) 
#define TWF_WANTPALM  (0x00000002) 

WINUSERAPI 
BOOL 
WINAPI 
RegisterTouchWindow(
    HWND hwnd, 
    ULONG ulFlags); 

WINUSERAPI 
BOOL 
WINAPI 
UnregisterTouchWindow(
    HWND hwnd); 

WINUSERAPI 
BOOL 
WINAPI 
IsTouchWindow(
    HWND hwnd, 
    PULONG pulFlags); 

#endif /* WINVER >= 0x0601 */ 

#ifdef __cplusplus 
} 
#endif /* __cplusplus */ 
} 
#endif //RAWTOUCHDATA_H 
+0

클래스 또는 네임 스페이스 내에 일부 Windows API 파일의'# include '를 넣은 것처럼 보입니다. 그것은'HWND' 타입이'rawData' 클래스 또는 네임 스페이스에 속한다고 생각합니다. (나는 실제로 그 코드를 보지 않고 어떤 것을 말할 수 없습니다.) –

+0

rawData 클래스가 Windows 헤더에 의해 선언 된 범위가 아닌 경우 자체 HWND 유형을 선언하는 것처럼 들립니다. –

+0

@SamCristall : 안녕하세요, 파일이 내 수업의 헤더 파일에 포함되어 있습니다. –

답변

1

namespace rawTData 자신에 최선을 다하는함으로써, 당신은 rawTData에 속하는 해당 유형의 모든 선언했습니다. HWND은 Windows API 유형이며 이 아니며 rawTData::HWND과 같은입니다. 네임 스페이스는 Intellisense가 표시하지 않으려는 코드 집합을 단순히 래핑하는 것이 아니라 디렉토리와 같은 형식으로 이름을 "숨김" 구조. 간단한 픽스는 namespace rawTData {을 자신의 선언보다 아래로 이동시키는 것입니다.하지만 질문을 던지십시오. 왜 을 모두 포장하고namespace rawTData으로 만드시겠습니까?

Windows.h 정의를 잘라내어 자신의 네임 스페이스에 붙여 넣은 것처럼 보입니다. 정말로 적절한 파일을 포함시켜야합니다. 문제가 해결되지 않으면 해결해야 할 다른 문제가있을 수 있으며 이와 같이 복사하여 붙여 넣으면 안됩니다.

+0

감사합니다. 작동했습니다. –