J'ai le pointeur sur le contrôle avec fonction
CWnd* CWnd::GetDlgItem(int ITEM_ID)
donc j'ai CWnd*
pointeur qui pointe vers le contrôle, mais ne peut tout simplement pas trouver de méthode dans la classe CWnd
qui récupérera la taille et l'emplacement d'un contrôle donné. De l'aide?
CRect rect;
CWnd *pWnd = pDlg->GetDlgItem(YOUR_CONTROL_ID);
pWnd->GetWindowRect(&rect);
pDlg->ScreenToClient(&rect); //optional step - see below
//position: rect.left, rect.top
//size: rect.Width(), rect.Height()
GetWindowRect
donne les coordonnées d'écran du contrôle. pDlg->ScreenToClient
les convertira ensuite par rapport à la zone client de la boîte de dialogue, qui est généralement ce dont vous avez besoin.
Remarque: pDlg
ci-dessus est la boîte de dialogue. Si vous êtes dans une fonction membre de la classe dialog, supprimez simplement le pDlg->
.
En MFC/Win32 direct: (Exemple de WM_INITDIALOG)
RECT r;
HWND h = GetDlgItem(hwndDlg, IDC_YOURCTLID);
GetWindowRect(h, &r); //get window rect of control relative to screen
POINT pt = { r.left, r.top }; //new point object using rect x, y
ScreenToClient(hwndDlg, &pt); //convert screen co-ords to client based points
//example if I wanted to move said control
MoveWindow(h, pt.x, pt.y + 15, r.right - r.left, r.bottom - r.top, TRUE); //r.right - r.left, r.bottom - r.top to keep control at its current size
J'espère que cela t'aides! Bon codage :)