88 lines
2.0 KiB
C++
Raw Normal View History

2015-05-29 01:47:26 +09:00
#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
//<2F><><EFBFBD><EFBFBD><EFBFBD>ŏ<EFBFBD><C58F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>̂͌<CC82><CD8C>̃v<CC83><76><EFBFBD>V<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ă<EFBFBD><C482>
return CallWindowProc(OrgSubWnd, hWnd, uMsg, wParam, lParam);
}
// <20>_<EFBFBD>C<EFBFBD>A<EFBFBD><41><EFBFBD>O<EFBFBD>v<EFBFBD><76><EFBFBD>V<EFBFBD>[<5B>W<EFBFBD><57>(<28>`<60><><EFBFBD><EFBFBD>)
LRESULT CALLBACK CControl::DispatchSubProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
// <20>_<EFBFBD>C<EFBFBD>A<EFBFBD><41><EFBFBD>O<EFBFBD><4F> 32 <20>r<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>Ɋi<C98A>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
// this <20>|<7C>C<EFBFBD><43><EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E882BE>
CControl *pcControl = (CControl *)GetWindowLongPtr(hWnd, GWLP_USERDATA);
if(pcControl == NULL)
{
// <20><><EFBFBD>Ԃ񂱂<D482><F182B182><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ͂Ȃ<CD82>
return NULL;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>֐<EFBFBD><D690>̃_<CC83>C<EFBFBD>A<EFBFBD><41><EFBFBD>O<EFBFBD>v<EFBFBD><76><EFBFBD>V<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>Ăяo<D18F><6F>
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);
}