使用HOOK+SUBCLASSWINDOW写了个DLL,用于PB程序换肤,怎么区分各个控件?
使用HOOK+SUBCLASSWINDOW写了个DLL,用于PB程序换肤,怎么区分各个控件?我的部分代码如下,只有按钮和编辑控件可以判断出来。因为PB程序的类名和MFC的不一样,很难处理,请各位大牛帮助!
void BeginSubclassing(HWND hWnd)
{
char ClassName[MAX_PATH] = "";
GetClassName(hWnd, ClassName, MAX_PATH );
CWnd *pWnd = CWnd::FromHandle(hWnd);
DWORD style;
if(strstr(ClassName,"FNWND3")==ClassName || strstr(ClassName,"FNWNS3")==ClassName)//子类化窗口
{
CDlgBase *dlg=new CDlgBase(1);
dlg->SetCustomStyle(true);
dlg->SubclassWindow(hWnd);
}
else if(strcmp(ClassName, "Edit" ) == 0 )//子类化编辑框
{
CCmnEdit *ccmedit=new CCmnEdit();
ccmedit->SubclassWindow(hWnd);
}
else if(strcmp(ClassName, "Button" ) == 0 )
{
style = (UINT)GetWindowLong(hWnd, GWL_STYLE) & 0x0000ffff;
if ( style == BS_PUSHBUTTON || style == BS_DEFPUSHBUTTON )//子类化普通命令按钮
{
CCmnButton *cmnbutton=new CCmnButton();
cmnbutton->SubclassWindow(hWnd);
}
else if( style == WS_CHILD | WS_VISIBLE)//子类化静态文本
{
CSkinStatic *skinstatic=new CSkinStatic();
skinstatic->SubclassWindow(hWnd);
}
else if( style == BS_GROUPBOX)//子类化分组框
{
CStaticGrp *staticgrp=new CStaticGrp();
staticgrp->SubclassWindow(hWnd);
}
}
}