BCC5.5 - faire un bouton, une interface graphique.

BCC5.5 - faire un bouton, une interface graphique. - C++ - Programmation

Marsh Posté le 05-03-2004 à 14:47:30    

Bonjour,
 
COmment faire avec BCC55+ un bouton?
 
voilà ma fenêtre :

Code :
  1. #include <windows.h>
  2. //déclarations de variables
  3. LPSTR lpszAppName="Un projet";
  4. HINSTANCE hInst;
  5. HWND hWnd;
  6. //Prototypes de fonctions
  7. LONG WINAPI WndProc( HWND hWnd,
  8.   UINT uMsg,
  9.   WPARAM wParam,
  10.   LPARAM lParam );
  11. //Fonctions
  12. int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
  13.                       LPTSTR lpCmdLine, int nCmdShow)
  14. {
  15.     MSG      msg;
  16. WNDCLASS cls;
  17. // Enregistrer la classe fenêtre de l'application principale.
  18.      cls.hInstance = hInstance;
  19.      cls.lpszMenuName = lpszAppName;
  20.      cls.lpszClassName = lpszAppName;
  21.      cls.hIcon = LoadIcon(NULL,IDI_WARNING);
  22.      cls.hCursor = LoadCursor(NULL,IDC_ARROW);
  23.      cls.hbrBackground =(HBRUSH)(COLOR_WINDOW+1);
  24.      cls.style = CS_VREDRAW | CS_HREDRAW;
  25.      cls.lpfnWndProc = (WNDPROC)WndProc;
  26.      cls.cbWndExtra = 0;
  27.      cls.cbClsExtra = 0;
  28. if ( !RegisterClass( &cls ) )
  29.        return( FALSE );
  30. hInst = hInstance;
  31. // créer l'application principale
  32. hWnd = CreateWindow (lpszAppName,
  33.    lpszAppName,
  34.    WS_OVERLAPPEDWINDOW,
  35.    50,
  36.    50,
  37.    300,
  38.    200,
  39.    NULL,
  40.    NULL,
  41.    hInst,
  42.                           NULL
  43.                           );
  44.     if ( !hWnd )
  45. return( FALSE );
  46. ShowWindow( hWnd, nCmdShow );
  47.    UpdateWindow( hWnd );
  48. while( GetMessage( &msg, NULL, 0, 0) )
  49.     {
  50.          TranslateMessage( &msg );
  51.          DispatchMessage( &msg );
  52.     }
  53.     return( msg.wParam );
  54. }
  55. LONG WINAPI WndProc( HWND hWnd,
  56.   UINT uMsg,
  57.   WPARAM wParam
  58.   , LPARAM lParam )
  59. {
  60. switch(uMsg)
  61. {
  62.  case WM_CLOSE :
  63.  {
  64.   DestroyWindow( hWnd );
  65.  };
  66.  break;
  67.  case WM_DESTROY :
  68.  {
  69.   PostQuitMessage(0);
  70.  };
  71.  break;
  72.  case WM_QUERYENDSESSION :
  73.  {
  74.   DestroyWindow( hWnd );
  75.  };
  76.  break;
  77.  default :
  78.  return  DefWindowProc( hWnd, uMsg, wParam, lParam );
  79. };
  80. return 0;
  81. }

Reply

Marsh Posté le 05-03-2004 à 14:47:30   

Reply

Marsh Posté le 06-03-2004 à 11:13:45    

AGA a écrit :

Bonjour,
 
COmment faire avec BCC55+ un bouton?


 
C'est tout simple.
 
Tu déclares la variable globale HWND hWndButton=NULL; et dans ta boucle de messages, tu ajoutes le code suivant :
 

Code :
  1. case WM_CREATE:
  2. hWndButton=CreateWindow("BUTTON", "Mon joli button", WS_CHILD|WS_VISIBLE|WS_TABSTOP, 10, 10, 130, 22, hWnd, NULL, hInst, NULL);
  3. if ( !hWndButton ) {/* error */}
  4. break;


 
Sans oublier dans le case WM_CLOSE de détruire la fenêtre du bouton.
 
Tu vas voir que c'est assez moche. Pour enjoliver un peu le tout, il faut utiliser une police de caractères. Tu déclares donc une variable globale HFONT hFont=NULL; et la fonction suivante :
 

Code :
  1. void CreateButtonFont()
  2. {
  3. LOGFONT lf;
  4. memset(&lf, 0, sizeof(LOGFONT));
  5. strcpy(lf.lfFaceName, "Arial" );
  6. lf.lfHeight=-11;
  7. lf.lfWeight=FW_NORMAL;
  8. lf.lfOutPrecision=OUT_STROKE_PRECIS;
  9. lf.lfClipPrecision=CLIP_STROKE_PRECIS;
  10. lf.lfQuality=DRAFT_QUALITY;
  11. lf.lfPitchAndFamily=VARIABLE_PITCH|FF_SWISS;
  12. hFont=CreateFontIndirect(&lf);
  13. }


 
Et tu transformes le case WM_CREATE ainsi
 

Code :
  1. hWndButton=CreateWindow("BUTTON", "Mon joli button", WS_CHILD|WS_VISIBLE|WS_TABSTOP, 10, 10, 90, 22, hWnd, NULL, hInst, NULL);
  2. /* histoire de faire joli */
  3. CreateButtonFont();
  4. if ( !hWndButton || !hFont ) MessageBox(hWnd, "No more ressources", "Error", MB_OK|MB_ICONEXCLAMATION);
  5. if ( hFont ) SendMessage(hWndButton, WM_SETFONT, (WPARAM)hFont, TRUE);


 
Sans oublier de détruire la police dans le WM_CLOSE avec :
 

Code :
  1. if ( hFont ) {DeleteObject(hFont); hFont=NULL;}

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed