重绘CheckBox遇到一个问题

lang14 2012-11-21 11:43:08
比如有一个CheckBox控件 IDC_CHECK1 .h文件 CMyCheckBox m_check1;

cpp文件响应按钮点击事件比如:
void CXXXDlg::OnCheck1()
{
CButton *p1=(CButton*)GetDlgItem(IDC_CHECK1); //在这里设了一个断点
CButton *p2=(CButton*)GetDlgItem(IDC_CHECK2);
p1->SetCheck(1);
p2->SetCheck(1);
}
这时问题就来了,当我点击CheckBox按钮时,为什么进不去OnCheck1()这个函数呢?

附:我重绘CheckBox的代码是这样
// MyCheckBox.cpp : implementation file
//

/////////////////////////////////////////////////////////////////////////////
// CMyCheckBox message handlers

void CMyCheckBox::PreSubclassWindow()
{
UINT nBS;
nBS= GetButtonStyle();
SetButtonStyle(nBS| BS_OWNERDRAW);
CButton::PreSubclassWindow();
}

void CMyCheckBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CRect rect = lpDrawItemStruct->rcItem;
CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);

CRect ReRect,TextRect;
// CopyRect(ReRect,rect);
// ReRect.right=rect.Height();
ReRect.top=2;
ReRect.bottom=rect.bottom-2;
ReRect.left=rect.left=2;
ReRect.right=ReRect.bottom-ReRect.top;
CopyRect(TextRect,rect);
TextRect.left=ReRect.right+8;

CString strText;
GetWindowText(strText);

UINT state = lpDrawItemStruct->itemState;
if (state&ODS_DISABLED|| state & ODS_DEFAULT)
{
m_bDisable=TRUE;
}
else
{
m_bDisable=FALSE;
}

CBrush m_br;
m_br.CreateSolidBrush(m_BkColor);
pDC->FillRect(&rect,&m_br);

int nCheck=GetCheck();
if (nCheck)
{
DrawBitmap(pDC,IDB_BITMAP2,ReRect);
}
else
{
DrawBitmap(pDC,IDB_BITMAP3,ReRect);
}

CFont font;
font.CreateFont(m_FontSize,0,0,0,FW_NORMAL,FALSE,FALSE,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_MODERN,m_strFontName);
pDC->SelectObject(&font);
pDC->SetBkMode(TRANSPARENT);
if (m_bDisable)
{
pDC->SetTextColor(RGB(128,128,128));
}
else
{
pDC->SetTextColor(RGB(0,0,0));
}
pDC->DrawText(strText,&TextRect,DT_LEFT|DT_VCENTER|DT_SINGLELINE);
font.DeleteObject();
m_br.DeleteObject();
}

void CMyCheckBox::OnClicked()
{
int nState;
nState = GetCheck();
if(nState == 0)
nState = 1;
else
nState = 0;
SetCheck(nState);
}

LRESULT CMyCheckBox::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message==BM_SETCHECK)
{
// m_nChecked=wParam;
// SetMyCheck(wParam);
SetCheck(wParam);SetMyCheck(wParam);
}
if (message==BM_GETCHECK)
{
// return GetCheck();
return GetMyCheck();
// return m_nChecked;
}
return CButton::DefWindowProc(message, wParam, lParam);
}
int CMyCheckBox::GetMyCheck()
{
if (m_nChecked)
{
return 1;
}
return 0;
}
void CMyCheckBox::SetMyCheck(int nState)
{
if (nState)
{
m_nChecked=1;
}
else
{
m_nChecked=0;
}
Invalidate();
}
void CMyCheckBox::SetFontBkColor(COLORREF rgb)
{
m_BkColor=rgb;
}
void CMyCheckBox::SetFontSize(int nSize)
{
m_FontSize=nSize;
}
void CMyCheckBox::SetFontName(CString strFontName)
{
m_strFontName=strFontName;
}
void CMyCheckBox::DrawBitmap(CDC *pDC,UINT nID,CRect &rect)
{
CDC memDC;
BITMAP bmpInfo;
CBitmap bmp;
bmp.LoadBitmap(nID);
bmp.GetBitmap(&bmpInfo);
memDC.CreateCompatibleDC(pDC);
CBitmap *pOldBmp=memDC.SelectObject(&bmp);

pDC->StretchBlt(rect.left,rect.top,rect.right,rect.bottom,
&memDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);
pDC->SelectObject(pOldBmp);
bmp.DeleteObject();
}
...全文
401 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
邮箱:feng871345432@163.com
  • 打赏
  • 举报
回复
楼主,我按你的重绘代码来试了一下,怎么不行啊?点着没反应?能给提供个完整的代码吗?谢谢了。
快乐鹦鹉 2012-11-21
  • 打赏
  • 举报
回复
是不是被void CMyCheckBox::OnClicked() 截掉了
lang14 2012-11-21
  • 打赏
  • 举报
回复
引用 1 楼 happyparrot 的回复:
是不是被void CMyCheckBox::OnClicked() 截掉了
果然是被这个截掉了,问题解决了,谢谢各位
lang14 2012-11-21
  • 打赏
  • 举报
回复
引用 3 楼 lgstudyvc 的回复:
OnCheck1是不是写到别的类了
没写到别的类
lang14 2012-11-21
  • 打赏
  • 举报
回复
引用 2 楼 tiger9991 的回复:
两件事情做了没有? 1.消息映射 ON_BN_CLICKED(check资源编号, OnCheck1()) 2.是否用了控件绑定 void XXXX::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Check(pDX, check资源编号, m_check1); }
这两个事件肯定做了啊
lgstudyvc 2012-11-21
  • 打赏
  • 举报
回复
OnCheck1是不是写到别的类了
看不见的裂痕 2012-11-21
  • 打赏
  • 举报
回复
两件事情做了没有? 1.消息映射 ON_BN_CLICKED(check资源编号, OnCheck1()) 2.是否用了控件绑定 void XXXX::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Check(pDX, check资源编号, m_check1); }
内容概要:本文围绕基于三重移相控制(TPS)的双有源桥(DAB)高频隔离DC-DC变换器开展系统性研究,重点构建了其在Simulink环境下的高精度仿真模型。研究全面涵盖SPS单相移相、DPS双重重移相与TPS三重移相等多种控制策略的建模、实现与性能对比,深入分析不同模式下变换器的功率传输特性、软开关实现条件及功率回流问题,旨在提升DAB在交直流混合微电网、能量路由器、多端口柔性互联装置等场景中的转换效率与动态响应能力。通过对ZVS(零电压切换)条件的精确控制与移相角参数的优化,有效降低了开关损耗,增强了系统整体能效与运行稳定性。该仿真模型具有良好的可扩展性,适用于复杂电能转换系统的科研验证与工程开发。; 适合人群:电力电子、电气工程及其自动化等相关专业的硕士研究生、博士生、科研人员以及从事新能源变换器、柔性输配电系统设计的工程技术人员。; 使用场景及目标:①掌握双有源桥DAB变换器的基本工作原理及其在高频隔离场合的核心优势;②深入理解三重移相控制策略的设计机理、控制自由度分配及其在效率优化中的关键作用;③构建并调试可用于科研论文撰写、项目申报或实际系统验证的高保真Simulink仿真模型,支撑理论分析与实验对比。; 阅读建议:建议结合MATLAB/Simulink平台进行动手实践,重点关注主电路拓扑搭建、移相控制模块设计、驱动信号时序配置及ZVS实现条件的仿真观测,推荐通过对比SPS、DPS与TPS三种模式的稳态与动态响应曲线,深入掌握各控制策略的适用边界与优化方向。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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