Advertisement
ponchic

Untitled

Jan 15th, 2016
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <windows.h> // заголовочный файл, содержащий WINAPI
  2.  
  3.  
  4. // Прототип функции обработки сообщений с пользовательским названием:
  5. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  6. TCHAR mainMessage[] = L"Какой то-текст!"; // строка с сообщением
  7.  
  8. // Управляющая функция:
  9. int WINAPI WinMain(HINSTANCE hInst, // дескриптор экземпляра приложения
  10.     HINSTANCE hPrevInst, // не используем
  11.     LPSTR lpCmdLine, // не используем
  12.     int nCmdShow) // режим отображения окошка
  13. {
  14.     TCHAR szClassName[] = L"Мой класс"; // строка с именем класса
  15.     HWND hMainWnd; // создаём дескриптор будущего окошка
  16.     MSG msg; // создём экземпляр структуры MSG для обработки сообщений
  17.     WNDCLASSEX wc; // создаём экземпляр, для обращения к членам класса WNDCLASSEX
  18.     wc.cbSize        = sizeof(wc); // размер структуры (в байтах)
  19.     wc.style         = CS_HREDRAW | CS_VREDRAW; // стиль класса окошка
  20.     wc.lpfnWndProc   = WndProc; // указатель на пользовательскую функцию
  21.     wc.lpszMenuName  = NULL; // указатель на имя меню (у нас его нет)
  22.     wc.lpszClassName = szClassName; // указатель на имя класса
  23.     wc.cbWndExtra    = NULL; // число освобождаемых байтов в конце структуры
  24.     wc.cbClsExtra    = NULL; // число освобождаемых байтов при создании экземпляра приложения
  25.     wc.hIcon         = LoadIcon(NULL, IDI_WINLOGO); // декриптор пиктограммы
  26.     wc.hIconSm       = LoadIcon(NULL, IDI_WINLOGO); // дескриптор маленькой пиктограммы (в трэе)
  27.     wc.hCursor       = LoadCursor(NULL, IDC_ARROW); // дескриптор курсора
  28.     wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // дескриптор кисти для закраски фона окна
  29.     wc.hInstance     = hInst; // указатель на строку, содержащую имя меню, применяемого для класса
  30.     if(!RegisterClassEx(&wc)){
  31.         // в случае отсутствия регистрации класса:
  32.         MessageBox(NULL, L"Не получилось зарегистрировать класс!", L"Ошибка", MB_OK);
  33.         return NULL; // возвращаем, следовательно, выходим из WinMain
  34.     }
  35.     // Функция, создающая окошко:
  36.     hMainWnd = CreateWindow(
  37.         szClassName, // имя класса
  38.         L"Для сохранения снимка щёлкните по снимку (в окне)", // имя окошка (то что сверху)
  39.         WS_OVERLAPPEDWINDOW | WS_VSCROLL, // режимы отображения окошка
  40.         CW_USEDEFAULT, // позиция окошка по оси х
  41.         NULL, // позиция окошка по оси у (раз дефолт в х, то писать не нужно)
  42.         CW_USEDEFAULT, // ширина окошка
  43.         NULL, // высота окошка (раз дефолт в ширине, то писать не нужно)
  44.         (HWND)NULL, // дескриптор родительского окна
  45.         NULL, // дескриптор меню
  46.         HINSTANCE(hInst), // дескриптор экземпляра приложения
  47.         NULL); // ничего не передаём из WndProc
  48.     if(!hMainWnd){
  49.         // в случае некорректного создания окошка (неверные параметры и тп):
  50.         MessageBox(NULL, L"Не получилось создать окно!", L"Ошибка", MB_OK);
  51.         return NULL;
  52.     }
  53.     ShowWindow(hMainWnd, nCmdShow); // отображаем окошко
  54.     UpdateWindow(hMainWnd); // обновляем окошко
  55.     while(GetMessage(&msg, NULL, NULL, NULL)){ // извлекаем сообщения из очереди, посылаемые фу-циями, ОС
  56.         TranslateMessage(&msg); // интерпретируем сообщения
  57.         DispatchMessage(&msg); // передаём сообщения обратно ОС
  58.     }
  59.     return msg.wParam; // возвращаем код выхода из приложения
  60. }
  61.  
  62. LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
  63.     HDC hDC, hDCMem; // создаём дескриптор ориентации текста на экране
  64.     PAINTSTRUCT ps; // структура, сод-щая информацию о клиентской области (размеры, цвет и тп)
  65.     RECT rect; // стр-ра, определяющая размер клиентской области
  66.     COLORREF colorText = RGB(255, 0, 0); // задаём цвет текста
  67.     HBITMAP hBmp, hMaska, hOldBitmap, bmpMem;
  68.     BITMAP bmInfo;
  69.     HINSTANCE hInstance;
  70.     BOOL sucess;
  71.     OPENFILENAME ofn;
  72.     static BOOL SetWindowPosRes = FALSE;
  73.  
  74.     switch(uMsg){
  75.  
  76.     case WM_CREATE:
  77.         hDC = BeginPaint(hWnd, &ps);
  78.         //HBITMAP hBmp;
  79.  
  80.  
  81.  
  82.         break;
  83.  
  84.  
  85.     case WM_PAINT: {// если нужно нарисовать, то:
  86.         GetClientRect(hWnd, &rect);
  87.  
  88.         hDC = BeginPaint(hWnd, &ps); // инициализируем контекст устройства
  89.         if ( OpenClipboard(hWnd) )
  90.             hBmp = (HBITMAP)GetClipboardData(CF_BITMAP);
  91.         if (hBmp == NULL)
  92.         {
  93.             MessageBox(NULL, L"Error", L" ", MB_OK);
  94.             CloseClipboard();
  95.  
  96.             PostQuitMessage(NULL);
  97.  
  98.         }
  99.  
  100.         hDCMem = CreateCompatibleDC(hDC);
  101.  
  102.  
  103.         hOldBitmap = (HBITMAP) SelectObject(hDCMem, hBmp);
  104.         GetObject(hBmp, sizeof(bmInfo), &bmInfo);
  105.         bmpMem = CreateCompatibleBitmap (hDC, bmInfo.bmWidth-16, bmInfo.bmHeight-38);
  106.         BitBlt(hDC, 0, 0, bmInfo.bmWidth-16, bmInfo.bmHeight-38, hDCMem, 8, 30, SRCCOPY); //Оставлю этот идеальный код потомкам
  107.  
  108.         if (SetWindowPosRes == FALSE)
  109.         {
  110.             SetWindowPos(hWnd, (HWND)NULL, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight, SWP_NOMOVE);
  111.             SetWindowPosRes = TRUE;
  112.         }
  113.  
  114.  
  115.  
  116.  
  117.         CloseClipboard();
  118.  
  119.         DeleteDC(hDCMem);
  120.  
  121.  
  122.         EndPaint(hWnd, &ps); // заканчиваем рисовать
  123.  
  124.         break;
  125.                    }
  126.     case WM_LBUTTONDOWN: {
  127.         char szFileName[MAX_PATH] = "";
  128.  
  129.         ZeroMemory(&ofn, sizeof(ofn));
  130.  
  131.         ofn.lStructSize = sizeof(ofn);
  132.         ofn.hwndOwner = NULL;
  133.         ofn.lpstrFilter = (LPCWSTR)L"Text Files (*.bmp)\0*.bmp\0All Files (*.*)\0*.*\0";
  134.         ofn.lpstrFile = (LPWSTR)szFileName;
  135.         ofn.nMaxFile = MAX_PATH;
  136.         ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
  137.         ofn.lpstrDefExt = (LPCWSTR)L"bmp";
  138.  
  139.         GetSaveFileName(&ofn);
  140.  
  141.         //SAVE FUNCTION
  142.        
  143.         break;
  144.                          }
  145.     case WM_DESTROY: // если окошко закрылось, то:
  146.         PostQuitMessage(NULL); // отправляем WinMain() сообщение WM_QUIT
  147.         break;
  148.     default:
  149.         return DefWindowProc(hWnd, uMsg, wParam, lParam); // если закрыли окошко
  150.     }
  151.     return NULL; // возвращаем значение
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement