J'ai des problèmes pour déterminer le (ce que je crois être le) coordonnées du client d'un contrôle (bouton radio) dans le message WM_INITDIALOG
d'un DlgProc
.Comment déterminer les coordonnées des contrôles dans un message WM_INITDIALOG?
Voici ce que je cherche:
// Retrieve coordinates of Control with respect to the screen.
RECT rectOrthoButton;
GetWindowRect(GetDlgItem(hWnd, IDC_ORTHO), &rectOrthoButton);
// Translate coordinates to more useful coordinates: those that
// are used on the dialog.
// In order to do the translation we have to find the top left
// point (coordinates) of the dialog's client:
POINT dlgTopLeft;
ClientToScreen(hWnd, &dlgTopLeft);
// With these coordinates we can do the translation.
// We're only interested in top and left, so we skip
// bottom and right:
rectOrthoButton.top -= dlgTopLeft.y;
rectOrthoButton.left -= dlgTopLeft.x;
use_top_and_left(rectOrthoButton.top, rectOrthoButton.left);
Je me attendais rectOrthoButton.top
et .left
être les coordonnées en haut à gauche de mon contrôle par rapport à la zone client de la boîte de dialogue. Il se trouve qu'ils ne sont pas et je ne suis pas sûr ce qu'ils pointent comme rectOrthoButton.left
est égal à -40.
Modifier: Maintenant que je dirigeais pour initialiser le POINT avec
POINT dlgTopLeft = {0, 0};
(que je bêtement oublié): Y at-il un chemin plus court pour accomplir ce que je veux?
Ne devez-vous pas mettre '0' sur dlgTopLeft.x/y avant d'appeler ClientToScreen? –
Oui, ça l'a fait! Maintenant, si vous avez répondu, je pourrais cocher votre réponse comme étant * correcte * (ou quelle que soit la désignation de cette coche). Merci quand même. –