Tracer des rectangles

nassib0001 Messages postés 8 Date d'inscription samedi 11 avril 2009 Statut Membre Dernière intervention 3 mai 2010 - 19 mars 2010 à 11:59
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 21 mars 2010 à 19:47
BJr
je suis debutant en C++
je veux realiser un programmme qui permet d afficher une fentre simple
et de tracer quelque rectangle dedans

Abientot

3 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
21 mars 2010 à 17:18
Bonjour,

Merci de ne pas employer "je veux", de faire des phrases correctes (Pas de style SMS, utiliser de la ponctuation et des majuscules...), de ne pas double poster, et de donner des titres précisant le problème...

#ifdef UNICODE
#define _T(x) L ## x
typedef unsigned short TCHAR;
#else
#define _T(x) x
typedef char TCHAR;
#endif

#include <windows.h>

HINSTANCE _hThisInstance;              /* Handle du module                    */
HWND _hWnd;                            /* Handle de la fenêtre                */
LPTSTR _lpAppName = _T("Dessin");      /* Nom de l'appli                      */

HBRUSH _hMainBrush = NULL;             /* Brush de la couleur de la fenêtre   */
RECT _rect = { 10, 10, 200, 100 };

WORD __stdcall Err_ShowLast(TCHAR* lpTitle)
{
  DWORD nLastError;
  LPTSTR lpMessageBuffer;

  nLastError = GetLastError();

  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                NULL, nLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                (TCHAR*)(void*)&lpMessageBuffer, 0, NULL);

  MessageBox(NULL, lpMessageBuffer, lpTitle, MB_OK | MB_ICONERROR);

  LocalFree(lpMessageBuffer);
  return 1;
}

LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam)
{
  PAINTSTRUCT ps;             /* Info de dessin                                */
  HDC hDc;                    /* DC de dessin                                  */
  int bHandled;               /* Pour savoir si le message est traité          */
  long nResult;

  nResult = 0;
  bHandled = 0;
  switch (nMessage)
  {
    case WM_PAINT:
      hDc = BeginPaint(hWnd, &ps);
      FillRect(hDc, &_rect, _hMainBrush);
      EndPaint(hWnd, &ps);
      bHandled = 1;
      break;
    case WM_DESTROY:
      /* On signale que le thread va s'arrêter */
      PostQuitMessage(0);
      bHandled = 1;
      break;
  }
  if (! bHandled)
    nResult = DefWindowProc(hWnd, nMessage, wParam, lParam);
  return nResult;
}

BOOL __stdcall CreateMyWindow()
{
  WNDCLASSEX wincl;       /* Classe de la fenêtre utilisée                    */
  int nResult;

  nResult = 0;

  /* Création de la classe de fenêtre */
  wincl.cbSize = sizeof(WNDCLASSEX);
  wincl.style = 0;
  wincl.lpfnWndProc = WindowProcedure;
  wincl.cbClsExtra = 0;
  wincl.cbWndExtra = 0;
  wincl.hInstance = _hThisInstance;
  wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
  wincl.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
  wincl.lpszMenuName = 0;
  wincl.lpszClassName = _lpAppName;
  wincl.hIconSm = NULL;

  /* Enregistrement de la classe */
  if (! RegisterClassEx(&wincl)) goto the_end;

  /* Création de la fenêtre */
  _hWnd = CreateWindowEx(0, _lpAppName, _lpAppName,
                         WS_OVERLAPPED | WS_SYSMENU,
                         CW_USEDEFAULT, CW_USEDEFAULT, 500, 200,
                         HWND_DESKTOP, NULL, _hThisInstance, NULL);
  if (! _hWnd) goto the_end;

  /* Affichage de la fenêtre */
  ShowWindow (_hWnd, SW_SHOW);

  nResult = 1;
the_end:
  return nResult;
}

/**
 * Main
 */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  MSG message;                        /* Messages envoyés à l'application     */
  int nResult;

  /* Récupération du handle du module */
  _hThisInstance = hInstance;

  _hMainBrush = CreateSolidBrush(RGB(255, 0, 0));

  if (! CreateMyWindow())
  {
    nResult = Err_ShowLast(_T("Cannot create main window"));
    goto the_end;
  }

  /* Boucle de traitement des messages */
  while (GetMessage(&message, NULL, 0, 0))
  {
    TranslateMessage(&message);
    DispatchMessage(&message);
  }
  nResult = message.wParam;

the_end:
  if (_hMainBrush != NULL)
    DeleteObject(_hMainBrush);
  return nResult;
}
0
nassib0001 Messages postés 8 Date d'inscription samedi 11 avril 2009 Statut Membre Dernière intervention 3 mai 2010
21 mars 2010 à 17:23
Merci bien pour votre code sa marche bien et je veux savoir est ce que il est possible de dessiner plusieur rectangle ansi que des ligne
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
21 mars 2010 à 19:47
Qui peut tracer un rectangle peut tracer n rectangle : c'est la même fonction à simplement appeler plusieurs fois. Pour les lignes, tu as LineTo/MoveToEx.
0
Rejoignez-nous