Editor de Texto Incompleto em C/C++

  1 #include <windows.h>
  2  #include "resource.h"
  3  
  4  #define ID_EDIT     1
  5  
  6  LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
  7  
  8  TCHAR szAppName[] = TEXT("Editor de Texto Incompleto");
  9  
 10  void addMenus(HWND);
 11  
 12  HMENU eMenu;
 13  
 14  int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCS) {
 15      HACCEL   hAccel;
 16      HWND     hwnd;
 17      MSG      msg;
 18      WNDCLASS wndclass;
 19      wndclass.style         = CS_HREDRAW | CS_VREDRAW;
 20      wndclass.lpfnWndProc   = WndProc;
 21      wndclass.cbClsExtra    = 0;
 22      wndclass.cbWndExtra    = 0;
 23      wndclass.hInstance     = hInstance;
 24      wndclass.hIcon         = LoadIcon(hInstance, IDI_ICON);
 25      wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
 26      wndclass.hbrBackground = (HBRUSH) WHITE_BRUSH;
 27      wndclass.lpszMenuName  = szAppName;
 28      wndclass.lpszClassName = szAppName;
 29  
 30      if(!RegisterClass(&wndclass)) {
 31          MessageBox(NULL, TEXT("This program requires Windows NT!"),
 32                     szAppName, MB_ICONERROR);
 33          return 0;
 34      }
 35      hwnd = CreateWindow(szAppName, szAppName,
 36                            WS_OVERLAPPEDWINDOW,
 37                            GetSystemMetrics(SM_CXSCREEN) / 4,
 38                          GetSystemMetrics (SM_CYSCREEN) / 4,
 39                          GetSystemMetrics (SM_CXSCREEN) / 2,
 40                          GetSystemMetrics (SM_CYSCREEN) / 2,
 41                          NULL, NULL, hInstance, NULL);
 42      ShowWindow(hwnd, SW_SHOWNORMAL);
 43      UpdateWindow(hwnd);
 44      hAccel = LoadAccelerators(hInstance, szAppName);
 45  
 46      while(GetMessage(&msg, NULL, 0, 0)) {
 47          if(!TranslateAccelerator(hwnd, hAccel, &msg)) {
 48              TranslateMessage(&msg);
 49              DispatchMessage (&msg);
 50          }
 51      }
 52      return msg.wParam;
 53  }
 54  
 55  AskConfirmation(HWND hwnd) {
 56      return MessageBox(hwnd, TEXT("Really want to close PopPad2?"), szAppName, MB_YESNO | MB_ICONQUESTION);
 57  }
 58  
 59  LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
 60      static HWND hwndEdit;
 61      int         iSelect, iEnable;
 62      switch(message) {
 63          case WM_CREATE:
 64              addMenus(hwnd);
 65              hwndEdit = CreateWindow(
 66                  TEXT("edit"),NULL,WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|WS_BORDER|ES_LEFT|ES_MULTILINE|ES_AUTOHSCROLL|ES_AUTOVSCROLL,
 67                  0, 0, 0, 0,
 68                  hwnd, (HMENU) ID_EDIT, ((LPCREATESTRUCT) lParam)->hInstance, NULL
 69              );
 70              return 0;
 71          case WM_SETFOCUS:
 72              SetFocus(hwndEdit);
 73              return 0;
 74          case WM_SIZE:
 75              MoveWindow(hwndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
 76              return 0;
 77  
 78          case WM_COMMAND:
 79              if(lParam) {
 80                  if(LOWORD(lParam)==ID_EDIT&&(HIWORD(wParam)==EN_ERRSPACE||HIWORD(wParam)==EN_MAXTEXT))
 81                      MessageBox(hwnd, TEXT("Edit control out of space."), szAppName, MB_OK | MB_ICONSTOP);
 82                  return 0;
 83              }
 84              if(LOWORD(wParam)==3) {
 85                  int n = GetWindowTextLength(hwndEdit)+1;
 86                  static char tmn[500];
 87                  GetWindowText(hwndEdit, tmn, n);
 88                  MessageBox(NULL, tmn, "Teste", MB_OK);
 89              }
 90              else
 91                  switch(LOWORD(wParam)) {
 92                      case WM_CLOSE:
 93                          if(IDYES == AskConfirmation(hwnd))
 94                              DestroyWindow(hwnd);
 95                          return 0;
 96                      case WM_QUERYENDSESSION:
 97                          if (IDYES == AskConfirmation(hwnd))
 98                              return 1;
 99                          else
100                              return 0;
101                      case WM_DESTROY:
102                          PostQuitMessage(0);
103                          return 0;
104                  }
105          }
106          return DefWindowProc(hwnd, message, wParam, lParam);
107  }
108  
109  void addMenus(HWND hwnd) {
110      eMenu = CreateMenu();
111  
112      AppendMenu(eMenu, MF_STRING, 3, "Arquivo");
113      AppendMenu(eMenu, MF_STRING, NULL, "Editar");
114      AppendMenu(eMenu, MF_STRING, NULL, "Copiar");
115      AppendMenu(eMenu, MF_STRING, NULL, "Iniciar");
116  
117      SetMenu(hwnd, eMenu);
118  }

Comentários