Опытный
 
Профиль
Группа: Awaiting Authorisation
Сообщений: 562
Регистрация: 20.9.2007
Репутация: нет Всего: -1
|
нужно открыть графических файл битового формата. вот есть код | Код | /*--------------------------------------------------- BLOKOUT2.C -- Mouse Button & Capture Demo Program (c) Charles Petzold, 1996 ---------------------------------------------------*/
//------------------------------------------------------------- // Подключение заголовочных файлов //------------------------------------------------------------- #include <windows.h> #include <stdlib.h> #include "Laba7.h"
//------------------------------------------------------------- // Прототипы функций //------------------------------------------------------------- LRESULT CALLBACK FrameWndProc (HWND, UINT, WPARAM, LPARAM) ; LRESULT CALLBACK EllipseWndProc (HWND, UINT, WPARAM, LPARAM) ; LRESULT CALLBACK MetaWndProc (HWND, UINT, WPARAM, LPARAM) ; BOOL CALLBACK CloseEnumProc (HWND, LPARAM) ;
static HMETAFILE hmf; static char szFileName[] = "metafile.mtf";
//-------------------------------------------------------------- // Глобальные переменные //-------------------------------------------------------------- char szFrameClass[] = "MdiFrame" ; char szClass[] = "MdiNewEllipseChild" ; char szMetaClass[] = "MdiOpenChild" ; BOOL fBlocking, fValidBox ; POINT ptBeg, ptEnd, ptBoxBeg, ptBoxEnd ; HWND hwndClient, hwndFrame ;
HDC hdcMeta; HINSTANCE hInst ; HMENU hMenuInit, hMenuEllipse, hMenuMeta;
//-------------------------------------------------------------- // Регистрация классов главного и дочерних окон //-------------------------------------------------------------- int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HACCEL hAccel ; HWND hwndFrame, hwndClient ; MSG msg ; WNDCLASSEX wndclass ;
hInst = hInstance ;
if (!hPrevInstance) { // Регистрация главного окна wndclass.cbSize = sizeof (wndclass) ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = FrameWndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE + 1) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szFrameClass ; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;
RegisterClassEx (&wndclass) ; // Регистрация окна "NewEllipse" /*wndclass.cbSize = sizeof (wndclass) ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = EllipseWndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = sizeof (HANDLE) ; //резервируют дополнительную область памяти wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szClass ; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;
RegisterClassEx (&wndclass) ;*/
// Регистрация окна "The Current Metafile" wndclass.cbSize = sizeof (wndclass) ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = MetaWndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = sizeof (HANDLE) ;//резервируют дополнительную область памяти wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szMetaClass ; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;
RegisterClassEx (&wndclass) ; }
// Загрузка трех меню и сохранение их описателей в глобальных // переменных hMenuInit = LoadMenu (hInst, "MdiMenuInit") ; //hMenuEllipse = LoadMenu (hInst, "MdiMenuEllipse") ; hMenuMeta = LoadMenu (hInst, "MdiMenuMeta") ; // Загрузка таблицы горячих клавиш hAccel = LoadAccelerators (hInst, "MdiAccel") ;
// Создание главного окна hwndFrame = CreateWindow (szFrameClass, "Laba7", WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, hMenuInit, hInstance, NULL) ;
hwndClient = GetWindow (hwndFrame, GW_CHILD) ;
ShowWindow (hwndFrame, iCmdShow) ; UpdateWindow (hwndFrame) ;
// Цикл обработки сообщений while (GetMessage (&msg, NULL, 0, 0)) { if (!TranslateMDISysAccel (hwndClient, &msg) &&//преобразует любые комбинации клавиш, кот могут соответствовать //специальным быстрым клавишам MDI в сообщение WM_SYSCOMMAND. !TranslateAccelerator (hwndFrame, hAccel, &msg)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } }
// Освобождение памяти, занимаемой меню //DestroyMenu (hMenuEllipse) ; DestroyMenu (hMenuMeta) ;
return msg.wParam ; }
//---------------------------------------------------------------- // Оконная процедура главного окна //---------------------------------------------------------------- LRESULT CALLBACK FrameWndProc (HWND hwnd, UINT iMsg, WPARAM wParam,LPARAM lParam) { static HWND hwndClient ; CLIENTCREATESTRUCT clientcreate ; HWND hwndChild ; MDICREATESTRUCT mdicreate ;
// Обработка сообщений switch (iMsg) { // Создание окна case WM_CREATE : // Создание окна-администратора clientcreate.idFirstChild = IDM_FIRSTCHILD ; hwndClient = CreateWindow ("MDICLIENT", NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU) 1, hInst, (LPSTR) &clientcreate) ; return 0 ;
// Информирование о выборе какого-либо пункта меню case WM_COMMAND : switch (wParam) { // Если выбран пункт "New Ellipse" /* case IDM_NEW : // Создание окна c текстом mdicreate.szClass = szClass ; mdicreate.szTitle = "New Ellipse" ; mdicreate.hOwner = hInst ; mdicreate.x = CW_USEDEFAULT ; mdicreate.y = CW_USEDEFAULT ; mdicreate.cx = CW_USEDEFAULT ; mdicreate.cy = CW_USEDEFAULT ; mdicreate.style = 0 ; mdicreate.lParam = 0 ;
hwndChild = (HWND) SendMessage (hwndClient, WM_MDICREATE, 0, (LPARAM) (LPMDICREATESTRUCT) &mdicreate) ; return 0 ;*/
// Если выбран пункт "Open Metafile" case IDM_META: // Создание окна с информащией о программе mdicreate.szClass = szMetaClass ; mdicreate.szTitle = "The Current Metafile" ; mdicreate.hOwner = hInst ; mdicreate.x = CW_USEDEFAULT ; mdicreate.y = CW_USEDEFAULT ; mdicreate.cx = CW_USEDEFAULT ; mdicreate.cy = CW_USEDEFAULT ; mdicreate.style = 0 ; mdicreate.lParam = 0 ;
hwndChild = (HWND) SendMessage (hwndClient, WM_MDICREATE, 0, (LPARAM) (LPMDICREATESTRUCT) &mdicreate) ; return 0 ; case IDM_SAVE: hdcMeta=CreateMetaFile(szFileName); if (fValidBox) { SelectObject (hdcMeta, GetStockObject (BLACK_BRUSH)) ; Ellipse(hdcMeta, ptBoxBeg.x, ptBoxBeg.y, ptBoxEnd.x, ptBoxEnd.y) ; }
if (fBlocking) { SetROP2 (hdcMeta, R2_NOT) ; SelectObject (hdcMeta, GetStockObject (NULL_BRUSH)) ; Ellipse(hdcMeta, ptBeg.x, ptBeg.y, ptEnd.x, ptEnd.y) ; } hmf = CloseMetaFile (hdcMeta); return 0;
// Выход из программы case IDM_EXIT :
SendMessage (hwnd, WM_DESTROY, 0, 0) ; return 0 ;
default :
hwndChild = (HWND) SendMessage (hwndClient,WM_MDIGETACTIVE, 0, 0) ;
if (IsWindow (hwndChild)) SendMessage (hwndChild, WM_COMMAND, wParam, lParam) ; break ; } break ; // Выходные действия case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } // Все сообщения, которые оконная процедура главного // окна не обрабатывает, передаются в DefFrameProc return DefFrameProc (hwnd, hwndClient, iMsg, wParam, lParam) ; }
void DrawBoxOutline (HWND hwnd, POINT ptBeg, POINT ptEnd) { HDC hdcMeta ,hdc;
hdc = GetDC (hwnd) ; SetROP2 (hdc, R2_NOT) ; SelectObject (hdc, GetStockObject (NULL_BRUSH)) ; Ellipse(hdc, ptBeg.x, ptBeg.y, ptEnd.x, ptEnd.y) ;
ReleaseDC (hwnd, hdc) ; }
//---------------------------------------------------------------------- // Оконная процедура дочернего окна создания нового метафайла //---------------------------------------------------------------------- LRESULT CALLBACK EllipseWndProc (HWND hwnd, UINT iMsg, WPARAM wParam,LPARAM lParam) { /* static BOOL fBlocking, fValidBox ; static POINT ptBeg, ptEnd, ptBoxBeg, ptBoxEnd ; static HWND hwndClient, hwndFrame ; */ static HDC hdc, hdcMeta;
PAINTSTRUCT ps ;
switch (iMsg) {
case WM_CREATE : hwndClient = GetParent (hwnd) ; hwndFrame = GetParent (hwndClient) ; return 0 ; case WM_LBUTTONDOWN : ptBeg.x = ptEnd.x = LOWORD (lParam) ; ptBeg.y = ptEnd.y = HIWORD (lParam) ;
DrawBoxOutline (hwnd, ptBeg, ptEnd) ;
SetCapture (hwnd) ;//Windows посылает все сообщения мыши в оконную процедуру того окна, описателем //которого является hwnd SetCursor (LoadCursor (NULL, IDC_CROSS)) ;
fBlocking = TRUE ; return 0 ;
case WM_MOUSEMOVE : if (fBlocking) { SetCursor (LoadCursor (NULL, IDC_CROSS)) ;
DrawBoxOutline (hwnd, ptBeg, ptEnd) ;
ptEnd.x = LOWORD (lParam) ; ptEnd.y = HIWORD (lParam) ; DrawBoxOutline (hwnd, ptBeg, ptEnd) ; } return 0 ;
case WM_LBUTTONUP : if (fBlocking) { DrawBoxOutline (hwnd, ptBeg, ptEnd) ;
ptBoxBeg = ptBeg ; ptBoxEnd.x = LOWORD (lParam) ; ptBoxEnd.y = HIWORD (lParam) ;
ReleaseCapture () ; SetCursor (LoadCursor (NULL, IDC_ARROW)) ;
fBlocking = FALSE ; fValidBox = TRUE ;
InvalidateRect (hwnd, NULL, TRUE) ; } return 0 ; //Обработка сообщения WM_CHAR позволяет //отказаться от захвата мыши при нажатии пользователем клавиши <Escape> case WM_CHAR : if (fBlocking & wParam == '\x1B') // i.e., Escape { DrawBoxOutline (hwnd, ptBeg, ptEnd) ; ReleaseCapture () ; SetCursor (LoadCursor (NULL, IDC_ARROW)) ;
fBlocking = FALSE ; } return 0 ;
case WM_PAINT : hdc = BeginPaint (hwnd, &ps) ; if (fValidBox) { SelectObject (hdc, GetStockObject (BLACK_BRUSH)) ; Ellipse(hdc, ptBoxBeg.x, ptBoxBeg.y, ptBoxEnd.x, ptBoxEnd.y) ; }
if (fBlocking) { SetROP2 (hdc, R2_NOT) ; SelectObject (hdc, GetStockObject (NULL_BRUSH)) ; Ellipse(hdc, ptBeg.x, ptBeg.y, ptEnd.x, ptEnd.y) ; }
EndPaint (hwnd, &ps) ; return 0 ; case WM_MDIACTIVATE : DrawMenuBar (hwndFrame) ; return 0 ;
// Главное окно посылает асинхронное сообщение WM_QUERYENDSESSION? // когда пользователь выбирает в меню опцию Close //case WM_QUERYENDSESSION : /* case IDM_SAVE: hdcMeta=CreateMetaFile(szFileName); if (fValidBox) { SelectObject (hdcMeta, GetStockObject (BLACK_BRUSH)) ; Ellipse(hdcMeta, ptBoxBeg.x, ptBoxBeg.y, ptBoxEnd.x, ptBoxEnd.y) ; } : if (fBlocking) { SetROP2 (hdcMeta, R2_NOT) ; SelectObject (hdcMeta, GetStockObject (NULL_BRUSH)) ; Ellipse(hdcMeta, ptBeg.x, ptBeg.y, ptEnd.x, ptEnd.y) ; } hmf = CloseMetaFile (hdcMeta); return 0; */ case WM_CLOSE : // Вывод на экран сообщения с запросом пользователю о том, // можно ли закрывать окно if (IDOK != MessageBox (hwnd, "do you want Exit?", "Ellipse", MB_ICONQUESTION | MB_OKCANCEL)) return 0 ; break;
case WM_DESTROY : return 0 ; } // Все необработанные сообщения передаются в return DefMDIChildProc (hwnd, iMsg, wParam, lParam) ; }
//------------------------------------------------------------------ // Оконная процедура дочернего окна открытия метафайла //------------------------------------------------------------------ LRESULT CALLBACK MetaWndProc (HWND hwnd, UINT iMsg, WPARAM wParam,LPARAM lParam) { static HWND hwndClient, hwndFrame ; static HDC hdc, hdcMeta; PAINTSTRUCT ps ;
// Обработка сообщений switch (iMsg) { // Создание окна case WM_CREATE : // Save some window handles hwndClient = GetParent (hwnd) ; hwndFrame = GetParent (hwndClient) ; return 0 ;
// Прорисовка окна case WM_PAINT : // Начало вывода hdc = BeginPaint (hwnd, &ps) ; // Открытие метафайла hmf = GetMetaFile (szFileName); // Загрузка информации метафайла PlayMetaFile (hdc, hmf); // Конец вывода EndPaint (hwnd, &ps) ; return 0 ;
case WM_MDIACTIVATE : DrawMenuBar (hwndFrame) ; return 0 ; // Выходные действия case WM_DESTROY : // Удаление описателя метафайла DeleteMetaFile(hmf); return 0 ; } // Все необработанные сообщения передаются в return DefMDIChildProc (hwnd, iMsg, wParam, lParam) ; }
|
Тут открывается метафаил. А что изменить надо чтобы графических файл битового формата? Добавлено через 14 минут и 41 секундувот нашел | Код | HBITMAP bitmap = (HBITMAP)LoadImage(NULL, fileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
|
но не понятно куда его вставить | Код | // Если выбран пункт "Open Metafile" case IDM_META: // Создание окна с информащией о программе mdicreate.szClass = szMetaClass ; mdicreate.szTitle = "The Current Metafile" ; mdicreate.hOwner = hInst ; mdicreate.x = CW_USEDEFAULT ; mdicreate.y = CW_USEDEFAULT ; mdicreate.cx = CW_USEDEFAULT ; mdicreate.cy = CW_USEDEFAULT ; mdicreate.style = 0 ; mdicreate.lParam = 0 ;
hwndChild = (HWND) SendMessage (hwndClient, WM_MDICREATE, 0, (LPARAM) (LPMDICREATESTRUCT) &mdicreate) ; return 0 ;
|
по логике сюда куда то.... Сори я в вин апи плохо шарю
Присоединённый файл ( Кол-во скачиваний: 1 )
7.rar 13,68 Kb
|