クリックした座標のハンドル – プログラミング – Home

クリックした座標のハンドル
 
通知
すべてクリア

クリックした座標のハンドル


たまごっち
 たまごっち
(@たまごっち)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

クリックした座標のハンドルを得る方法を教えてください。
クリックした時、メッセージで、キーとかマウスのボタンの押し状態と
マウス座標が得られることが分かりました。

クリックした座標が、hWndなのかhEditなのかを知りたいです。
座標からハンドル名を得る関数が分かればできると思うんだけど
いい方法があれば教えてください。


引用解決済
トピックタグ
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

「ハンドル名」という語句は使わないと思いますが、「クラス名」を取得したいならGetClassNameです。
「ハンドル」を取得したいのならWindowFromPointでしょうか。


返信引用
たまごっち
 たまごっち
(@たまごっち)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

ハンドルが得られるようになりました。
ハンドルを文字列として取り出すにはどうしたらいいんですか?

ハンドルが得らえたけど、位置がずれてます。
エディットボックスの少し下がエディットボックスになっています。
この修正はどうしたらいいんですか?

#include <windows.h>

HWND hEDIT;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int){

HWND hWnd;
WNDCLASSEX wc;
MSG msg;

wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.lpszClassName = test;
wc.lpszMenuName = NULL;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);

if(!RegisterClassEx(&wc))return FALSE;

hWnd = CreateWindow(test,",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
10,10,450,450,
HWND_DESKTOP,NULL,hInstance,NULL);

hEDIT = CreateWindow(EDIT,",
WS_CHILD | WS_VISIBLE | WS_BORDER,
30,30,200,25,
hWnd,NULL,hInstance,NULL);

while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam){

HDC hDC;
PAINTSTRUCT ps;
POINT pt;

switch(msg){
case WM_LBUTTONDOWN:
hDC = GetDC(hWnd);
GetCursorPos( &pt );
ScreenToClient( hWnd, &pt );

if(WindowFromPoint(pt) == HWND_DESKTOP)
TextOut(hDC, 5, 120, デスクトップ, 12);
else if(WindowFromPoint(pt) == hEDIT)
TextOut(hDC, 5, 120, エディットボックス, 18);
else if(WindowFromPoint(pt) == hWnd)
TextOut(hDC, 5, 120, このウインドウ, 14);
else TextOut(hDC, 5, 120, その他, 6);

if(ChildWindowFromPoint(hWnd, pt) == HWND_DESKTOP)
TextOut(hDC, 5, 140, デスクトップ, 12);
else if(ChildWindowFromPoint(hWnd, pt) == hEDIT)
TextOut(hDC, 5, 140, エディットボックス, 18);
else if(ChildWindowFromPoint(hWnd, pt) == hWnd)
TextOut(hDC, 5, 140, このウインドウ, 14);
else TextOut(hDC, 5, 140, その他, 6);

ReleaseDC(hWnd, hDC);
break;

case WM_DESTROY:
PostQuitMessage(0);
break;

default:
return DefWindowProc(hWnd,msg,wParam,lParam);
}
return 0;
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました