このサイトを参考に,ウィンドウプロシージャのすり替えをしようとしましたが,掲載されているソースコード(のGWL_WNDPROCをGWLP_WNDPROCに変えた)をコンパイルしようとすると,
test.cpp:34:48: error: cast from 'LRESULT (*)(HWND, UINT, WPARAM, LPARAM)' {aka 'long long int (*)(HWND__*, unsigned int, long long unsigned int, long long int)'} to 'LONG' {aka 'long int'} loses precision [-fpermissive] SetWindowLong(rect_box , GWL_WNDPROC , (LONG)StaticProc); ^~~~~~~~~~
というエラーがでてしまいます。「数値からポインタにはキャストできないよー」という趣旨のエラーであることはわかるんですが,どう試してもエラーになるので途方に暮れています。
ソースコード
C++
1#include <windows.h> 2 3WNDPROC DefStaticProc; 4 5LRESULT CALLBACK StaticProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { 6 switch(msg) { 7 case WM_NCHITTEST: 8 if (GetKeyState(VK_LBUTTON) < 0) 9 MessageBox( 10 hwnd , TEXT("Kitty on your lap") , 11 TEXT("Kitty") , MB_OK 12 ); 13 return 0; 14 } 15 return CallWindowProc(DefStaticProc , hwnd , msg , wp , lp); 16} 17 18LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { 19 static HWND rect_box; 20 21 switch (msg) { 22 case WM_DESTROY: 23 PostQuitMessage(0); 24 return 0; 25 case WM_CREATE: 26 rect_box = CreateWindow( 27 TEXT("STATIC") , TEXT("Kitty") , 28 WS_CHILD | WS_VISIBLE , 29 0 , 0 , 200 , 45 , 30 hwnd , (HMENU)1 , 31 ((LPCREATESTRUCT)(lp))->hInstance , NULL 32 ); 33 DefStaticProc = (WNDPROC)GetWindowLongPtr(rect_box , GWLP_WNDPROC); 34 SetWindowLongPtr(rect_box , GWLP_WNDPROC , (LONG)StaticProc); 35 return 0; 36 } 37 return DefWindowProc(hwnd , msg , wp , lp); 38} 39 40int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , 41 PSTR lpCmdLine , int nCmdShow ) { 42 HWND hwnd; 43 MSG msg; 44 WNDCLASS winc; 45 46 winc.style = CS_HREDRAW | CS_VREDRAW; 47 winc.lpfnWndProc = WndProc; 48 winc.cbClsExtra = winc.cbWndExtra = 0; 49 winc.hInstance = hInstance; 50 winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); 51 winc.hCursor = LoadCursor(NULL , IDC_ARROW); 52 winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 53 winc.lpszMenuName = NULL; 54 winc.lpszClassName = TEXT("KITTY"); 55 56 if (!RegisterClass(&winc)) return -1; 57 58 hwnd = CreateWindow( 59 TEXT("KITTY") , TEXT("Kitty on your lap") , 60 WS_OVERLAPPEDWINDOW | WS_VISIBLE , 61 CW_USEDEFAULT , CW_USEDEFAULT , 62 CW_USEDEFAULT , CW_USEDEFAULT , 63 NULL , NULL , hInstance , NULL 64 ); 65 66 if (hwnd == NULL) return -1; 67 68 while(GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg); 69 return msg.wParam; 70} 71
環境
Windows8
MinGW-W64
gcc
1Using built-in specs. 2COLLECT_GCC=gcc 3COLLECT_LTO_WRAPPER=D:/Apps/MinGW-W64/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe 4Target: x86_64-w64-mingw32 5Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-pos 6ix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable 7-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --e 8nable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --w 9ith-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64 10-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/pro 11jects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisi 12tes/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include 13 -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/in 14clude -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_6 154-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib ' 16Thread model: posix 17gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。