#include <CLClass.h> #define IMGCTL_RUNTIME #define WINAPI __stdcall #include "imgctl.h" #define LOAD_DLL(PATH) \ this->lib = LoadLibrary( #PATH ); \ if ( this->lib == NULL ) { \ MsgOk(#PATH " を使用できません"); \ } #define LOAD_FUNC(TYPE,FUNC) \ FUNC = (TYPE)GetProcAddress( this->lib, #FUNC ); \ if ( FUNC == NULL ) { \ MsgOk( #FUNC " をロードできません"); \ } class MyClass : public CLWin { public: void ProcEnd(); void WMPaint(); void LVClick(); void LVDblclick(); void ProcOperator(); void WMCreate(); MyClass(); virtual ~MyClass(); HINSTANCE lib; HDIB hDib; DELETEDIB DeleteDIB; TODIB ToDIB; HEADDIB HeadDIB; DIBTODC DIBtoDC; };
// ********************************************************* // コンストラクタ // ********************************************************* MyClass::MyClass() { this->hDib = NULL; }
LOAD_DLL(imgctl.dll) if ( this->lib != NULL ) { LOAD_FUNC(DELETEDIB,DeleteDIB) LOAD_FUNC(TODIB,ToDIB) LOAD_FUNC(HEADDIB,HeadDIB) LOAD_FUNC(DIBTODC,DIBtoDC) }
// ********************************************************* // 終了処理 // ********************************************************* void MyClass::ProcEnd() { if ( this->hDib != NULL ) { DeleteDIB( this->hDib ); } if ( this->lib != NULL ) { FreeLibrary( this->lib ); } }
// ********************************************************* // 描画 // ********************************************************* void MyClass::WMPaint() { BITMAPINFOHEADER bi; if ( this->hDib != NULL ) { HeadDIB( this->hDib, &bi ); DIBtoDC( this->hDc, 0, LTbar->Height(), bi.biWidth, bi.biHeight, this->hDib, 0, 0, SRCCOPY ); } }
switch( ControlId ) { case IDM_IMAGE: { LboxString LString; LboxCommdlg Commdlg( this->hWnd ); Commdlg.lpstrTitle = "ファイルを開く"; Commdlg.lpstrFilter = "画像ファイル,*.jpg;*.jpeg;*.png;*.gif;*.bmp"; if ( Commdlg.OpenFileName( &LString ) ) { LView->Hide(); this->hDib = ToDIB( LString.szLboxString ); ::RedrawWindow( this->hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ERASE ); } break; }