为什么:使用skinmagic 换肤后,HITTEST 无效了

lvning 2007-11-19 07:29:49
我使用skinmagic更换了基于对话框程序的皮肤,但更换后,鼠标进入对话框区域时,没有执行函数ONHITTEST(),其它的onMousemove()等函数正常,这是为什么?
...全文
92 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunlin7 2007-11-25
  • 打赏
  • 举报
回复
已经改好了, have fun!

by the way, not everyone has time to do job for others.
lvning 2007-11-25
  • 打赏
  • 举报
回复
请问楼上:
CTempDlgDlg这个类是不是要我来添加一个对话框类啊?
在我用ClassWizard添加这个类之,我按你说的做了,报错:
static CTempDlgDlg *pClass;
missing ';' before '*'
当然还有其他的错误...


在我用ClassWizard添加这个类之,我按你说的做了,报错:

CTempDlgDlg *CTempDlgDlg::pClass; 这句的报错:

error C2350:'CTempDlgDlg::pClass'is not a static member

pClass = this; 这句的报错:
error C2440:'=':cannot convert from 'class CSkinDlg *const' to 'class CTempDlgDlg *'

其它的还有:
error C2039 'pWnd':is not a member of'CTempDlgDlg' 等等

CTempDlgDlg这个类是不是要我来添加一个对话框类啊?


所以,哥们,能不能给我一个编译通过的完整工程源码啊?我很着急,谢谢


sunlin7 2007-11-24
  • 打赏
  • 举报
回复

xxxxDlg.h里面添加
protected:
static LRESULT CALLBACK MyWnd(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static LRESULT (CALLBACK *pWnd)(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static CTempDlgDlg *pClass;
在xxxxDlg.cpp里面添加:
CTempDlgDlg *CTempDlgDlg::pClass;
LRESULT (CALLBACK *CTempDlgDlg::pWnd)(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK CTempDlgDlg::MyWnd(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
CPoint p(LOWORD(lParam), HIWORD(lParam));
switch (message)
{
case WM_NCHITTEST:
pClass->OnNcHitTest(p);
break;
}
return pWnd( hDlg, message, wParam, lParam);
}

BOOL CxxxxDlg::OnInitDialog()
{
pClass = this;
(LONG&)pWnd = SetWindowLong(GetSafeHwnd(), GWL_WNDPROC, (LONG)MyWnd);
....
}
即可.
lvning 2007-11-23
  • 打赏
  • 举报
回复
楼上两位接到我的短消息了吗?
能给我一个完整的源码吗?
LRESULT CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
SetWindowSkin(hDlg,"MainFrame");
(LONG&)pWnd = SetWindowLong(hDlg, GWL_WNDPROC, (LONG)MyWnd);
....
}
“....”这里应该写什么?
这些源码写在.cpp文件里吗?
Chivalry 2007-11-21
  • 打赏
  • 举报
回复
mark lisunlin
sunlin7 2007-11-21
  • 打赏
  • 举报
回复

LRESULT (CALLBACK *pWnd)(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK MyWnd(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_NCHITTEST:
MessageBox(0, 0, 0, 0); // 在这里改为你的MFC处理过程即可.
break;
}
return pWnd( hDlg, message, wParam, lParam);
}

LRESULT CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
SetWindowSkin(hDlg,"MainFrame");
(LONG&)pWnd = SetWindowLong(hDlg, GWL_WNDPROC, (LONG)MyWnd);
....
}
sunlin7 2007-11-21
  • 打赏
  • 举报
回复
原因是SkinMagic处理了WM_NCHITTEST这个消息而没有传递,在SDK下面可以用SetWindowLong来重新分发,稍作修改即可用于MFC中.
LRESULT (CALLBACK *pWnd)(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK MyWnd(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_NCHITTEST:
MessageBox(0, 0, 0, 0); // 在这里改为你的MFC处理过程即可.
break;
}
return pWnd( hDlg, message, wParam, lParam);
}

LRESULT CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
SetWindowSkin(hDlg,"MainFrame");
(LONG&)pWnd = SetWindowLong(hDlg, GWL_WNDPROC, (LONG)MyWnd);
....
}
lvning 2007-11-21
  • 打赏
  • 举报
回复

对不起,应该是onNCHittest(),高手请赐教
我使用skinmagic更换了基于对话框程序的皮肤,但更换后,鼠标进入对话框区域时,没有执行函数onNCHittest(),其它的onMousemove()等函数正常,这是为什么?

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧