Simple Clipboard Viewer (Apenas Texto) - CTRL+C

Simple Clipboard Viewer (Apenas Texto)
  1 #include <windows.h>
  2  
  3  LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  4  
  5  int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  6                     PSTR szCmdLine, int iCmdShow) {
  7  
  8      static TCHAR szAppName[] = TEXT("ClipView");
  9      HWND         hwnd;
 10      MSG          msg;
 11      WNDCLASS     wndclass;
 12  
 13      wndclass.style         = CS_HREDRAW | CS_VREDRAW;
 14      wndclass.lpfnWndProc   = WndProc;
 15      wndclass.cbClsExtra    = 0;
 16      wndclass.cbWndExtra    = 0;
 17      wndclass.hInstance     = hInstance;
 18      wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
 19      wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
 20      wndclass.hbrBackground = (HBRUSH) WHITE_BRUSH;
 21      wndclass.lpszMenuName  = NULL;
 22      wndclass.lpszClassName = szAppName;
 23  
 24      if(!RegisterClass(&wndclass)) {
 25          MessageBox(NULL, TEXT("This program requires Windows NT!"),
 26                     szAppName, MB_ICONERROR);
 27          return 0;
 28      }
 29      hwnd = CreateWindow(szAppName, TEXT("Simple Clipboard Viewer (Apenas Texto)"),
 30                          WS_OVERLAPPEDWINDOW,
 31                          CW_USEDEFAULT, CW_USEDEFAULT,
 32                          CW_USEDEFAULT, CW_USEDEFAULT,
 33                          NULL, NULL, hInstance, NULL);
 34  
 35      ShowWindow(hwnd, iCmdShow);
 36      UpdateWindow (hwnd) ;
 37  
 38      while(GetMessage(&msg, NULL, 0, 0)) {
 39          TranslateMessage(&msg);
 40          DispatchMessage (&msg);
 41      }
 42  
 43      return msg.wParam;
 44  }
 45  
 46  LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
 47                            WPARAM wParam, LPARAM lParam) {
 48  
 49      static HWND hwndNextViewer;
 50      HGLOBAL     hGlobal;
 51      HDC         hdc;
 52      PTSTR       pGlobal;
 53      PAINTSTRUCT ps;
 54      RECT        rect;
 55  
 56      switch(message) {
 57          case WM_CREATE:
 58              hwndNextViewer = SetClipboardViewer(hwnd);
 59              return 0;
 60  
 61          case WM_CHANGECBCHAIN:
 62              if((HWND) wParam == hwndNextViewer)
 63                  hwndNextViewer = (HWND) lParam;
 64              else if(hwndNextViewer)
 65                  SendMessage(hwndNextViewer, message, wParam, lParam);
 66              return 0;
 67  
 68          case WM_DRAWCLIPBOARD:
 69              if (hwndNextViewer)
 70                  SendMessage(hwndNextViewer, message, wParam, lParam);
 71              InvalidateRect(hwnd, NULL, TRUE);
 72              return 0;
 73  
 74          case WM_PAINT:
 75              hdc = BeginPaint(hwnd, &ps);
 76              GetClientRect(hwnd, &rect);
 77              OpenClipboard(hwnd);
 78              #ifdef UNICODE
 79                  hGlobal = GetClipboardData(CF_UNICODETEXT);
 80              #else
 81                  hGlobal = GetClipboardData(CF_TEXT);
 82              #endif
 83  
 84              if(hGlobal != NULL) {
 85                  pGlobal = (PTSTR) GlobalLock(hGlobal);
 86                  DrawText(hdc, pGlobal, -1, &rect, DT_EXPANDTABS);
 87                  GlobalUnlock(hGlobal);
 88              }
 89              CloseClipboard();
 90              EndPaint(hwnd, &ps);
 91              return 0;
 92  
 93          case WM_DESTROY:
 94              ChangeClipboardChain(hwnd, hwndNextViewer);
 95              PostQuitMessage(0);
 96              return 0;
 97      }
 98      return DefWindowProc(hwnd, message, wParam, lParam);
 99  }

Comentários