CStatic响应消息
来源:互联网 发布:淘宝店名大全 创意 编辑:程序博客网 时间:2024/05/21 14:44
2.勾上Notify
重载了CStatic类 CMyStatic,并在视图类里定义了一个CMyStatic对象;
但是我重载的
ON_WM_RBUTTONDBLCLK()
ON_WM_RBUTTONDOWN()
ON_WM_LBUTTONDOWN()
ON_WM_NCMBUTTONDOWN()
BOOL CMyStatic::PreSubclassWindow()
{
ModifyStyle(0, SS_NOTIFY);
}
使用时
对话框静态模板上的控件创建的过程稍有不同,它的OnCreate消息将由对话框处理。动态创建的话,就可以响应
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_CREATE )
{
if ( pMsg->hwnd == m_MyStatic.GetSafeHwnd() )
{
m_MyStatic.SendMessage(pMsg->message, pMsg->wParam, pMsg->lParam);
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
Transparent 属性不是指绘制文字时候透明,而是对鼠标点击时间的透明,也就是说,
鼠标点在一个具有透明属性的窗口上,鼠标消息将传递给其下面不具有透明属性的窗口。
要想让 STATIC 控件绘制透明,需要自己进行绘制工作,处理WM_CTLCOLORSTATIC消息,将DC的bkcolor设置成transparent
自己处理OnCtlColor,就是这个ON_WM_CTLCOLOR()
消息
HBRUSH CFvMain::OnCtlColor(CDC * pDC,CWnd * pWnd,UINT nCtlColor)
{
HBRUSH hbr=CFormView::OnCtlColor(pDC,pWnd,nCtlColor);
if (nCtlColor==CTLCOLOR_STATIC || nCtlColor==CTLCOLOR_EDIT)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
return hbr;
}
if (nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(255, 0, 0));//设置成你背景的颜色
pDC->SetBkMode(TRANSPARENT);
hbr = m_brush;//HBRUSH hbr 一个公共变量。。你设置的颜色
}
一个透明的CStatic的类
/*===========================================================================
==== ====
==== File name : StaticTrans.h ====
==== Creation date : 7/10/2001 ====
==== Author(s) : Dany Cantin ====
==== ====
===========================================================================*/
#ifndef STATICTRANS_H
#define STATICTRANS_H
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CStaticTrans window
#define TRANS_BACK -1
class CStaticTrans : public CStatic
{
// Construction
public:
CStaticTrans();
private:
COLORREF m_TextColor;
COLORREF m_BackColor;
CBrush m_Brush;
// Operations
public:
void SetTextColor(COLORREF col) { m_TextColor = col;
UpdateCtrl(); }
void SetBackColor(COLORREF col) { m_BackColor = col;
UpdateCtrl(); }
private:
void UpdateCtrl();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CStaticTrans)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CStaticTrans();
// Generated message map functions
protected:
//{{AFX_MSG(CStaticTrans)
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif // STATICTRANS_H
/*===========================================================================
==== ====
==== File name : StaticTrans.cpp ====
==== Creation date : 7/10/2001 ====
==== Author(s) : Dany Cantin ====
==== ====
===========================================================================*/
#include "stdafx.h"
#include "StaticTrans.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CStaticTrans
CStaticTrans::CStaticTrans()
{
m_TextColor = RGB(0, 0, 0);
m_BackColor = TRANS_BACK;
}
CStaticTrans::~CStaticTrans()
{
}
BEGIN_MESSAGE_MAP(CStaticTrans, CStatic)
//{{AFX_MSG_MAP(CStaticTrans)
ON_WM_CTLCOLOR_REFLECT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStaticTrans message handlers
HBRUSH CStaticTrans::CtlColor(CDC* pDC, UINT nCtlColor)
{
m_Brush.DeleteObject();
if (m_BackColor == TRANS_BACK) {
m_Brush.CreateStockObject(HOLLOW_BRUSH);
pDC->SetBkMode(TRANSPARENT);
}
else {
m_Brush.CreateSolidBrush(m_BackColor);
pDC->SetBkColor(m_BackColor);
}
pDC->SetTextColor(m_TextColor);
return (HBRUSH)m_Brush;
}
void CStaticTrans::UpdateCtrl()
{
CWnd* pParent = GetParent();
CRect rect;
GetWindowRect(rect);
pParent->ScreenToClient(rect);
rect.DeflateRect(2, 2);
pParent->InvalidateRect(rect, FALSE);
}
- CStatic响应消息
- MFC中如何让一个CStatic控件响应消息
- 让CStatic继承类响应键盘方向键消息
- CStatic 自绘 OnMouseWheel 消息不响应的问题。
- 如何让自定义的基于CStatic的控件响应鼠标移动的消息
- 如何让自定义的基于CStatic的控件响应鼠标移动的消息
- 一个SDI程序基于CFormView视。上面放一个CStatic控件,给视图添加双击消息,运行程序后,双击视图,会有弹出消息响应。 但是双击CStatic类控件,却没有响应
- CStatic空间的鼠标事件响应,以及...
- CStatic
- CStatic
- CStatic
- CStatic
- cstatic
- CStatic
- 消息响应
- 动态创建的Cstatic Text 响应鼠标点击事件
- MFC中静态文本框(CStatic)响应鼠标单击事件
- 关于CStatic类不能重载ON_WM_LBUTTONDOWN消息的问题
- oracle10g错误信息(ORA-02140~ORA-04099 )
- php调用js文件的好办法
- PHP在字符串中查找指定字符串并删除
- 优秀的实践之所以成本低是由大规模的构件重用来实现
- 开博前传-写在成名之前的话
- CStatic响应消息
- [转]地址解析协议(ARP)
- 五行代码带来的无缝滚动程序
- oracle10g错误信息(ORA-04930~ORA-07499 )
- 生活,需要过得充实
- 控制 PHP 类的实例化次数!
- WinInet库接口穿越代理服务器
- [转]什么是ARP?如何防范ARP欺骗?
- oracle10g错误信息(ORA-07500~ORA-09859 )