WINAPI에서 마우스 클릭 이벤트가 발생하면 마우스의 x-y 아이콘에 흰색 아이콘이있는 빨간색 아이콘이 표시됩니다. 마우스를 클릭 할 때마다 아이콘을 어떻게 표시합니까? 마우스 클릭을 setwindowshookex에 연결하는 방법을 알고 있습니다. 아래에 표시된 아이콘 쇼와 같은 기능이 있습니까?마우스 클릭 이벤트가있는 화면에 winapi 디스플레이 아이콘이 있습니다.
HHOOK msHOOK;
//getting the icon let's say from a rc file
HICON redIcon;
msHOOK = SetWindowsHookEx(WH_MOUSE_LL, mouseProc, NULL, 0);
LRESULT CALLBACK mouseProc(int nCode, WPARAM wPar, LPARAM lPar){
IconShow(NULL, redIcon, xofMouse, yofMouse, 0);
MessageBox(NULL, "Icon showed", "Cap", 0);
return CallNextHookEx(NULL, nCode, wPar, lPar);
}
while(GetMessage(&msg, NULL, 0, 0) > 0){
TranslateMessage(&msg);
}
감사
UPDATE
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdParam, int iCmdShow){
HWND wnd;
MSG msg;
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);
wc.lpszMenuName = NULL;
wc.lpszClassName = "ClassName";
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wnd = CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_LAYERED, "ClassName", "ss", NULL, CW_USEDEFAULT, CW_USEDEFAULT, 100, 100, NULL, NULL, NULL, NULL);
SetLayeredWindowAttributes(wnd, RGB(255, 255, 0), 20, LWA_COLORKEY);
ShowWindow(wnd, SW_SHOW);
while (GetMessage(&msg, NULL, 0, 0) > 0) {
TranslateMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
//stuff here
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
이미지를 'HICON'대신'HCURSOR'로로드 할 수 있다면, Win32 API ['SetCursor()'] (https://msdn.microsoft.com/en-us/library)를보십시오. /windows/desktop/ms648393.aspx) 함수를 호출합니다. –
@RemyLebeau – turmuka
을 업데이트했습니다. 창을 전혀 사용하지 않으면 표준 '버튼'을 사용할 수 없습니다. 'WM_ERASEBKGND'와'WM_PAINT' 페인트 메세지를 처리하는 커스텀 윈도우 프로 시저를 가진 커스텀 윈도우 클래스 ('RegisterClass()'참고)가 필요합니다. 'UpdateLayeredWindow()'를 사용하여 비트 맵을 윈도우의 전체 디스플레이로 할당하지 않는다면, 그 메시지를 처리 할 필요가 없습니다. –