main.cpp:
Code: Select all
#include <windows.h>
#include "libgfl.h"
#include "libgfle.h"
#include "main.h"
/* глобальные переменные */
HINSTANCE h; // хендл программы
HWND hw; // хендл главного окна программы
GFL_BITMAP *img = NULL; // картинка
/* WinMain */
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
h = GetModuleHandle(0);
hw = CreateMainWindow(h,"ImgView"); // создали интерфейс
/* цикл обработки сообщений */
if(gflLibraryInit()) // инициализация библиотеки
MessageBox(0,"Error","Error",MB_OK);
MSG msg;
while(GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hw,UINT msg,WPARAM wp, LPARAM lp)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_COMMAND:
switch(LOWORD(wp))
{
case IDM_EXIT:
SendMessage(hw,WM_DESTROY,wp,lp);
return 0;
case IDM_OPEN:
OpenImage(hw, img);
return 0;
}
}
return DefWindowProc(hw,msg,wp,lp);
}
Code: Select all
#define IDM_OPEN 0
#define IDM_EXIT 1
/* прототипы функций */
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
void CreateClass(HINSTANCE h,char * clname)
{
WNDCLASSEX wc;
memset(&wc,0,sizeof(WNDCLASSEX)); // забили нулями структуру
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc;
wc.hInstance = h;
wc.hCursor = LoadCursor(0,IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
wc.lpszClassName = clname;
RegisterClassEx(&wc); // создали класс окна программы
}
HWND CreateMainWindow(HINSTANCE h,char * title)
{
CreateClass(h,"ImgViewClass");
return CreateWindowEx
(
0, // расширенные стили
"ImgViewClass", // имя класса окна
title, // заголовок окна
WS_OVERLAPPEDWINDOW|WS_VISIBLE, // стили окна
CW_USEDEFAULT, // x
CW_USEDEFAULT, // y
CW_USEDEFAULT, // ширина
CW_USEDEFAULT, // высота
0, // хендл родителя
LoadMenu(h,"ImgViewMenu"), // хендл меню
h, // хендл программы, чьё окно
0 // сферический нолик в вакуме
);
}
LPSTR OpenFileName(HWND hw)
{
OPENFILENAME ofn;
char szFile[260];
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hw;
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "JPEG\0*.jpg\0GIF\0*.gif\0PNG\0*.png\0BMP\0*.bmp";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if(GetOpenFileName(&ofn))
{
return ofn.lpstrFile;
}
else
{
return 0;
}
}
void OpenImage(HWND hw,GFL_BITMAP * img)
{
if(img)
gflFreeBitmap(img);
GFL_LOAD_PARAMS params;
gflGetDefaultLoadParams(¶ms); // устанавливаем параметры в стандартные
LPSTR str = OpenFileName(hw);
if(str)
{
MessageBox(0,gflGetErrorString(gflLoadBitmap(str,&img,¶ms,0)),"Error",MB_OK);
}
}
Code: Select all
#include "main.h"
ImgViewMenu MENU
{
MENUITEM "&Open", IDM_OPEN
MENUITEM "&Exit", IDM_EXIT
}