Resize position ctrl (win32)

Soyez le premier à donner votre avis sur cette source.

Vue 4 087 fois - Téléchargée 233 fois

Description

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.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
13 mars 2005

Bon exemple pour comprendre le mécanisme.
Merci et à +
Messages postés
25
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
17 novembre 2003

Whaaa Merci beaucoup, grace a ton code j'ai pus enfin faire un programme qui suportait la mise en plein écran ou que quand j'augmente la taille de la fenêtre, le reste suit...
Merci beaucoup

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.