如何添加下面的事件

wensheng_zh2007 2009-07-26 11:07:51
/////////////////////////////////////////////////////////////////////////////
// CHyperLink window

class CHyperLink : public CStatic
{
// Construction/destruction
public:
CHyperLink();
virtual ~CHyperLink();

public:
enum UnderLineOptions { ulHover = -1, ulNone = 0, ulAlways = 1};

// Attributes
public:
void SetURL(CString strURL);
CString GetURL() const;

void SetColours(COLORREF crLinkColour, COLORREF crVisitedColour,
COLORREF crHoverColour = -1);
COLORREF GetLinkColour() const;
COLORREF GetVisitedColour() const;
COLORREF GetHoverColour() const;

void SetVisited(BOOL bVisited = TRUE);
BOOL GetVisited() const;

void SetLinkCursor(HCURSOR hCursor);
HCURSOR GetLinkCursor() const;

void SetUnderline(int nUnderline = ulHover);
int GetUnderline() const;

void SetAutoSize(BOOL bAutoSize = TRUE);
BOOL GetAutoSize() const;

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CHyperLink)
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
virtual BOOL DestroyWindow();
protected:
virtual void PreSubclassWindow();
//}}AFX_VIRTUAL

// Implementation
protected:
HINSTANCE GotoURL(LPCTSTR url, int showcmd);
void ReportError(int nError);
LONG GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata);
void PositionWindow();
void SetDefaultCursor();

// Protected attributes
protected:
COLORREF m_crLinkColour, m_crVisitedColour; // Hyperlink colours
COLORREF m_crHoverColour; // Hover colour
BOOL m_bOverControl; // cursor over control?
BOOL m_bVisited; // Has it been visited?
int m_nUnderline; // underline hyperlink?
BOOL m_bAdjustToFit; // Adjust window size to fit text?
CString m_strURL; // hyperlink URL
CFont m_UnderlineFont; // Font for underline display
CFont m_StdFont; // Standard font
HCURSOR m_hLinkCursor; // Cursor for hyperlink
CToolTipCtrl m_ToolTip; // The tooltip
UINT m_nTimerID;

// Generated message map functions
protected:
//{{AFX_MSG(CHyperLink)
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
afx_msg void OnClicked();
DECLARE_MESSAGE_MAP()
};


这里面的
//{{AFX_MSG(CHyperLink)
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
这些事件是怎么添加上的?
这个类继承自CStatic,好像不提供这些事件,但是怎么添加上了?
这些事件明显是dialog的
...全文
55 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hgreminem 2009-07-26
在左边ClassView中,

对着你要添加事件的类单击右键

选中Add Windows Message Handle

这样就可以添加WINDOWS消息事件了
回复
flyskytoday 2009-07-26
菜单->View->ClassWizard
你对一些消息处理好象不知道,是才学VC的吧?
回复
悟迟 2009-07-26
首先我这个类是继承自CStatic而不是dialog,如果在dialog当中,当然可以添加这些事件了。在CStatic中只有那么可怜的几个时间,在vc6中好像只有一个onclicked

加的地方不一样。如果是vc9的话,你有没有试过在“类视图”右键"属性"->"消息"->WM_SETCURSOR
然后就会出现
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
BOOL CHyperLink::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

return CStatic::OnSetCursor(pWnd, nHitTest, message);
}


afx_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/);
HBRUSH CHyperLink::CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/)
{
// TODO: 在此更改 DC 的任何属性

// TODO: 如果不应调用父级的处理程序,则返回非 null 画笔
return NULL;
}

则是“=WM_CTLCOLOR”
回复
hgreminem 2009-07-26
[Quote=引用 3 楼 wensheng_zh2007 的回复:]
首先我这个类是继承自CStatic而不是dialog,如果在dialog当中,当然可以添加这些事件了。在CStatic中只有那么可怜的几个时间,在vc6中好像只有一个onclicked

[/Quote]
只要是窗口控件都可以添加WINDOWS消息事件呀

你先试试,我这边都可以的

自己由CStatic派生出一个自己的Static类

然后按照我刚才的方法添加就行

WINDOWS所有消息事件都可以重载的
回复
jufengaihaozhe 2009-07-26
如果你没有加,也没有别人加,那就是应用程序向导自己加上的
回复
gg606 2009-07-26
哦,不能添加是因为那个类是别人已经建好的。

如果你自己建一个新类,就可以用ClassWizard 或者用ClassWizardBar添加
回复
gg606 2009-07-26
是手工加上的!
回复
gyang_pinner 2009-07-26
你给它自己添加个ID试试
回复
oldmanzhao 2009-07-26
可以啊,只要是窗口基本上都有这些事件。
回复
WaistCoatX 2009-07-26
VS什么版本?
回复
wensheng_zh2007 2009-07-26
首先我这个类是继承自CStatic而不是dialog,如果在dialog当中,当然可以添加这些事件了。在CStatic中只有那么可怜的几个时间,在vc6中好像只有一个onclicked
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告