mirror of
https://github.com/lltcggie/waifu2x-caffe.git
synced 2025-06-26 21:52:49 +00:00
88 lines
2.0 KiB
C++
88 lines
2.0 KiB
C++
#include <windows.h>
|
|
#include "CControl.h"
|
|
|
|
|
|
CControl::CControl(const UINT ID)
|
|
{
|
|
ResourceID = ID;
|
|
}
|
|
|
|
CControl::CControl()
|
|
{
|
|
}
|
|
|
|
CControl::~CControl()
|
|
{
|
|
}
|
|
|
|
void CControl::RegisterFunc(HWND hWnd)
|
|
{
|
|
hSub = GetDlgItem(hWnd, ResourceID);
|
|
|
|
if(hSub == NULL)
|
|
return;
|
|
|
|
SetWindowLongPtr(hSub, GWLP_USERDATA, (LONG_PTR)this);
|
|
|
|
OrgSubWnd = (WNDPROC)GetWindowLongPtr(hSub, GWLP_WNDPROC);
|
|
SetWindowLongPtr(hSub, GWLP_WNDPROC, (LONG_PTR)DispatchSubProc);
|
|
}
|
|
|
|
int CControl::GetResourceID()
|
|
{
|
|
return ResourceID;
|
|
}
|
|
|
|
void CControl::SetEventCallBack(const CustomEventFunc &func, const LPVOID lpData, const UINT uMsg)
|
|
{
|
|
mEventMap[uMsg] = stEvent(func, lpData);
|
|
}
|
|
|
|
BOOL CControl::Register(LPCTSTR ClassName, const HINSTANCE hInstance)
|
|
{
|
|
WNDCLASS winc;
|
|
|
|
winc.style = CS_HREDRAW | CS_VREDRAW;
|
|
winc.cbClsExtra = winc.cbWndExtra = 0;
|
|
winc.hInstance = hInstance;
|
|
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
|
|
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
|
|
winc.lpszMenuName = NULL;
|
|
winc.lpfnWndProc = DispatchCustomProc;
|
|
winc.hIcon = NULL;
|
|
winc.lpszClassName = ClassName;
|
|
|
|
return RegisterClass(&winc);
|
|
}
|
|
|
|
LRESULT CControl::SubProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
auto it = mEventMap.find(uMsg);
|
|
if(it != mEventMap.end())
|
|
return it->second.pfunc(hWnd, wParam, lParam, OrgSubWnd, it->second.lpData);
|
|
else
|
|
//自分で処理しないものは元のプロシージャにやってもらう
|
|
return CallWindowProc(OrgSubWnd, hWnd, uMsg, wParam, lParam);
|
|
}
|
|
|
|
// ダイアログプロシージャ(形式上)
|
|
LRESULT CALLBACK CControl::DispatchSubProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
// ダイアログの 32 ビット整数に格納されている
|
|
// this ポインタを取りだす
|
|
CControl *pcControl = (CControl *)GetWindowLongPtr(hWnd, GWLP_USERDATA);
|
|
if(pcControl == NULL)
|
|
{
|
|
// たぶんここが実行されることはない
|
|
return NULL;
|
|
}
|
|
|
|
// メンバ関数のダイアログプロシージャを呼び出す
|
|
return pcControl->SubProc(hWnd, uMsg, wParam, lParam);
|
|
}
|
|
|
|
LRESULT CALLBACK CControl::DispatchCustomProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
|
}
|