使用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);
}
}}
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);
}
}}
解决方案 »
- WinPcap捕获的数据包如何区分方向?
- 小数在内存中是怎样存放的?
- 如何在view类中显示当前时间
- 新手高分求教(不够可再加):对于无窗口activex控件,如何响应鼠标事件?最好能有例程,谢谢!
- [答谢]节假日中仍热心帮助大家解决问题的网友
- 新手上路:最近想用vc和vb混合编程,但不知道从哪里入手或是去找那些文章来看,希望前辈们给与指点!
- vc6 怎么 200m 600m 800m 的都有阿?
- 这个问题如何解决
- 谢谢,请问在ToolBar上如何实现ToolBar上按钮的运行时的添加和删除????
- 本人对SDK有所了解,现在想学MFC却无从下手,深入浅出MFC太难不易于入门,我该看什么书请高手指点
- 如何在MFC中,使用选项卡控件时给对话框添加控制变量
- x264编解码器要怎么用的(把directshow采集到的视频sample进行编解码)?求个大致过程。
else if(strcmp(ClassName, "Button" ) == 0 )
{
style = (UINT)GetWindowLong(hWnd, GWL_STYLE) & 0x0000ffff; if ( style == 0x00000000 )//子类化普通命令按钮
{
CCmnButton *cmnbutton=new CCmnButton();
cmnbutton->SubclassWindow(hWnd);
}
else if( style == 0x0000000b)//子类化静态文本
{
CSkinStatic *skinstatic=new CSkinStatic();
skinstatic->SubclassWindow(hWnd);
skinstatic->DrawTransparent(TRUE);
}
else if( style == 0x00000007)//子类化分组框
{
CStaticGrp *staticgrp=new CStaticGrp();
staticgrp->SubclassWindow(hWnd);
}
}