Exemple pour modifier position ctrl si resize.
Un edit et 2 boutons. Edit se redimensionne.
Les 2 boutons se mettent dessous et centres.
Source / Exemple :
#include <windows.h>
#include "resource.h"
HWND hrec, hquit, hed;
char szappname[] = "ResizeWind";
void __stdcall onSizeDlg(long lParam)
{
RECT rc;
long cx, cy; // largeur et hauteur de fenetre
long l, h; // largeur et hauteur des boutons
cx = LOWORD(lParam); cy = HIWORD(lParam);
GetWindowRect(hrec, &rc); // dimensions bouton enreg
l = rc.right - rc.left; h = rc.bottom - rc.top;
cy -= (h + 6); // 3 au dessus des boutons et 3 en dessous
MoveWindow(hed, 1, 1, cx - 2, cy, 1);
cy += 3;
if(cx >= (l*2 + 22)) { // centrage avec 20 d'ecart
rc.left = (cx - l*2 - 20) / 2 + 1;
MoveWindow(hrec, rc.left, cy, l, h, 1);
MoveWindow(hquit, rc.left + l + 20, cy, l, h, 1);
}
else { // je les colle a gauche
MoveWindow(hrec, 1, cy, l, h, 1);
MoveWindow(hquit, l + 2, cy, l, h, 1);
}
}
void __stdcall SimuleSizeDlg(HWND hdlg)
{
RECT rc;
GetClientRect(hdlg, &rc);
onSizeDlg((rc.bottom << 16) | (rc.right & 0xFFFF));
}
BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
switch(mssg) {
case WM_INITDIALOG:
SetClassLong(hdlg, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));
hrec = GetDlgItem(hdlg, IDBT_RECORD);
hquit = GetDlgItem(hdlg, IDBT_QUIT);
hed = GetDlgItem(hdlg, IDED_TXT);
SimuleSizeDlg(hdlg);
return TRUE;
case WM_SIZE:
if(wParam != SIZE_MINIMIZED) onSizeDlg(lParam);
return 0;
case WM_COMMAND:
switch(wParam) {
case IDBT_RECORD:
SetWindowText(hed, szappname); // un truc bidon
return 0;
case IDBT_QUIT: case IDCANCEL:
EndDialog(hdlg, 0);
}
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_APP), NULL, AppDlgProc);
return 0;
}
Conclusion :
Code complet dans le zip avec projet en VC++ 7.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.