我用C++创建了一个小型的MFC文档视图应用程序,我在从CStatic继承的类中接收消息时遇到了一些麻烦.我已经设法创建CStatic衍生物,它在我的View上可见但是我的消息处理程序没有被触发.
当使用Spy ++时,似乎窗口只是接收WM_NCHITTEST并且它正在返回HTTRANSPARENT,根据MSDN意味着:
"在同一个线程中另一个窗口当前覆盖的窗口中(该消息将被发送到同一线程中的基础窗口,直到其中一个窗口返回不是HTTRANSPARENT的代码)."
这是Spy ++的一篇文章:
<000001> 001D1350 S WM_NCHITTEST xPos:128 yPos:167
<000002> 001D1350 R WM_NCHITTEST nHittest:HTTRANSPARENT
<000003> 001D1350 S WM_NCHITTEST xPos:128 yPos:166
<000004> 001D1350 R WM_NCHITTEST nHittest:HTTRANSPARENT
<000005> 001D1350 S WM_NCHITTEST xPos:128 yPos:165
<000006> 001D1350 R WM_NCHITTEST nHittest:HTTRANSPARENT
<000007> 001D1350 S WM_NCHITTEST xPos:128 yPos:164
<000008> 001D1350 R WM_NCHITTEST nHittest:HTTRANSPARENT
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪,因为CStatic衍生物是我观点中唯一的子窗口.我这样创建它:
Create(pItem->Value->GetBuffer(), WS_CHILD | WS_VISIBLE | SS_CENTER, Rect, Parent);
ShowWindow(SW_SHOW);
Run Code Online (Sandbox Code Playgroud)
Parent指向的指针在哪里CView.
任何帮助将非常感激.
编辑:
foo.h中
class Foo: public CStatic
{
DECLARE_DYNAMIC(Foo)
public:
Foo();
virtual ~Foo();
virtual void CreateCtrl(CWnd * Parent, POINT TopLeft, SIZE sz);
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
};
Run Code Online (Sandbox Code Playgroud)
Foo.cpp中
void Foo::CreateCtrl(CWnd * Parent, POINT TopLeft, SIZE sz)
{
CRect Rect(TopLeft, sz);
Create(pItem->Value->GetBuffer(), WS_CHILD | WS_VISIBLE | SS_CENTER, Rect, Parent);
ShowWindow(SW_SHOW);
}
BEGIN_MESSAGE_MAP(Foo, CStatic)
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()
void Foo::OnLButtonUp(UINT nFlags, CPoint point)
{
AfxMessageBox("Hello World!");
__super::OnLButtonUp(nFlags, point);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
703 次 |
| 最近记录: |