社区
界面
帖子详情
请教关于重载CEdit类的问题(光标位置错误)
suerain
2003-09-30 04:35:20
我重载了WM_NCPAINT, WM_PAINT, 但是每次重绘的时候,光标位置都会错误,
我没有控制画光标,如果我不重载WM_PAINT的话,光标输出是正确的,到底是什么
原因呢?谢谢
附:哪里有xp风格的edit控件下载呢?谢谢
...全文
90
2
打赏
收藏
请教关于重载CEdit类的问题(光标位置错误)
我重载了WM_NCPAINT, WM_PAINT, 但是每次重绘的时候,光标位置都会错误, 我没有控制画光标,如果我不重载WM_PAINT的话,光标输出是正确的,到底是什么 原因呢?谢谢 附:哪里有xp风格的edit控件下载呢?谢谢
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
arvid_gs
2003-10-22
打赏
举报
回复
该一下就是xp风格的edit
CFlatEdit::CFlatEdit()
{
m_clrHilite = GetSysColor(COLOR_BTNHIGHLIGHT);
m_clrShadow = GetSysColor(COLOR_BTNSHADOW);
m_clrDkShad = GetSysColor(COLOR_3DDKSHADOW);
m_clrButton = GetSysColor(COLOR_BTNFACE);
m_bDrawGripper = TRUE;
m_bDrawSeperator = TRUE;
m_bFlatStyle = TRUE;
}
CFlatEdit::~CFlatEdit()
{
}
BEGIN_MESSAGE_MAP(CFlatEdit, CEdit)
//{{AFX_MSG_MAP(CFlatEdit)
ON_WM_LBUTTONDOWN()
ON_WM_PAINT()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_SYSCOLORCHANGE()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFlatEdit message handlers
void CFlatEdit::OnMouseMove(UINT nFlags, CPoint point)
{
SetTimer(1, 10, NULL);
CEdit::OnMouseMove(nFlags, point);
}
void CFlatEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bLBtnDown = true;
CEdit::OnLButtonDown(nFlags, point);
}
void CFlatEdit::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bLBtnDown = false;
CEdit::OnLButtonUp(nFlags, point);
}
void CFlatEdit::OnTimer(UINT nIDEvent)
{
POINT pt;
GetCursorPos(&pt);
CRect rcItem;
GetWindowRect(&rcItem);
static bool bPainted = false;
if(!rcItem.PtInRect(pt)) {
KillTimer(1);
DrawEdit(FE_MOUSEOUT, m_clrButton, m_clrButton);
return;
}
else {
DrawEdit(FE_MOUSEOVER, m_clrShadow, m_clrHilite);
}
CEdit::OnTimer(nIDEvent);
}
void CFlatEdit::OnPaint()
{
Default();
DrawEdit(FE_MOUSEOUT, m_clrButton, m_clrButton);
}
void CFlatEdit::OnSysColorChange()
{
CEdit::OnSysColorChange();
m_clrHilite = GetSysColor(COLOR_BTNHIGHLIGHT);
m_clrShadow = GetSysColor(COLOR_BTNSHADOW);
m_clrDkShad = GetSysColor(COLOR_3DDKSHADOW);
m_clrButton = GetSysColor(COLOR_BTNFACE);
}
void CFlatEdit::DrawEdit(int style, COLORREF clrTopLeft, COLORREF clrBottomRight)
{
CRect rcItem;
CRect rcGripper;
CRect rcSeperator;
GetClientRect(&rcItem);
GetClientRect(&rcGripper);
GetClientRect(&rcSeperator);
CDC* pDC = GetDC();
COLORREF clrBlack;
clrBlack = RGB(0, 0, 0);
if(m_bFlatStyle)
{
pDC->Draw3dRect(rcItem, clrTopLeft, clrBottomRight);
rcItem.InflateRect(1,1);
if (!IsWindowEnabled()) {
pDC->Draw3dRect(rcItem, m_clrHilite, m_clrHilite);
}
else {
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
}
rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.DeflateRect(4, 4);
if(m_bDrawGripper)
{
rcGripper.top = rcItem.top;
rcGripper.bottom = rcItem.bottom;
rcGripper.left -= 4;
rcGripper.right = rcGripper.left +2;
pDC->Draw3dRect(rcGripper, m_clrHilite, m_clrShadow);
rcGripper.left -= 3;
rcGripper.right = rcGripper.left +2;
pDC->Draw3dRect(rcGripper, m_clrHilite, m_clrShadow);
}
if(m_bDrawSeperator)
{
rcSeperator.top = rcItem.top;
rcSeperator.bottom = rcItem.bottom;
rcSeperator.left = rcItem.right + 2;
rcSeperator.right = rcSeperator.left + 2;
pDC->Draw3dRect(rcSeperator, m_clrShadow, m_clrHilite);
}
if (!IsWindowEnabled()) {
return;
}
if(style == FE_MOUSEOVER)
{
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton); //added this
rcItem.top -= 1; //added this
rcItem.left -= 1;
rcItem.bottom += 1;
rcItem.right += 1; //added this
pDC->Draw3dRect(rcItem, m_clrShadow, m_clrHilite); //was hilite, shadow
}
}
else {
pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
rcItem.InflateRect(1, 1);
pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.DeflateRect(4, 4);
if(m_bDrawGripper)
{
rcGripper.top = rcItem.top - 2;
rcGripper.bottom = rcItem.bottom + 2;
rcGripper.left -= 6;
rcGripper.right = rcGripper.left + 2;
pDC->Draw3dRect(rcGripper, clrBlack, clrBlack);
rcGripper.left -= 3;
rcGripper.right -= 3;
pDC->Draw3dRect(rcGripper, clrBlack, clrBlack);
}
if(m_bDrawSeperator)
{
rcSeperator.top = rcItem.top - 2;
rcSeperator.bottom = rcItem.bottom + 2;
rcSeperator.left = rcItem.right + 4;
rcSeperator.right = rcSeperator.left + 2;
pDC->Draw3dRect(rcSeperator, clrBlack, clrBlack);
}
}
ReleaseDC(pDC);
}
void CFlatEdit::SetIndent(int margin)
{
SetMargins(margin, 1);
}
oo
2003-09-30
打赏
举报
回复
up
VC++6.0实战指南:在Windows 11上维护与开发遗留MFC项目
C++作为经典的面向对象编程语言,其开发环境与工具链的演进深刻影响着软件工程的实践。在Windows平台开发领域,集成开发环境(IDE)扮演着核心角色,它整合了编辑器、编译器、调试器等工具,极大提升了开发效率。Visual C++ 6.0作为一款经典的IDE,其设计哲学高度集成且贴近Win32 API,尤其与MFC框架深度绑定,通过
类
向导等工具自动化了消息映射、虚函数
重载
等繁琐流程,显著提升了桌面GUI程序的开发效率。其技术价值在于生成的代码和运行时库极为紧凑,对系统资源消耗极低,这使得它在追求极致轻量与稳
VC++ 6.0深度解析:从MFC框架到遗留系统维护实战
C++作为面向对象编程的核心语言,其编译链接机制和内存管理原理是构建大型软件系统的基石。在Windows平台开发中,理解底层API调用和框架设计对于开发高性能、高稳定性应用程序至关重要。MFC(Microsoft Foundation Classes)框架作为早期Windows C++开发的事实标准,通过文档/视图架构和消息映射机制,极大地提升了GUI应用程序的开发效率。对于工业控制、嵌入式上位机等领域的遗留系统,掌握VC++ 6.0这一经典开发环境,不仅能深入理解PE文件格式、多线程同步等底层技术,更能实
基于中间电容应力分担机制的三阶立方体双向DC-DC变换器建模与优化设计(Matlab、Simulink、PSCD)
内容概要:本文聚焦于“基于中间电容应力分担机制的三阶立方体双向DC-DC变换器”的建模与优化设计,系统阐述其在dq域下的动态建模方法与控制策略优化,涵盖变频与移相协同控制、高电压增益实现、降频软启动、多模式平滑切换等核心技术。结合Matlab、Simulink及PSCAD仿真平台,深入实现全桥LLC、双三相LLC等谐振变换器的混合控制与动态响应分析,并拓展至飞轮储能系统、混合储能平抑风电波动、直流母线电压稳定控制等实际应用场景,构建了从器件级建模到系统级集成的完整仿真体系。同时包含多项高水平期刊论文的复现内容,强化科研可重复性与工程实用性。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员及从事新能源发电、储能系统、电动汽车、智能电网等领域研发的工程技术人员;具备电路拓扑分析、控制系统设计及仿真基础者更佳。; 使用场景及目标:①掌握高频双向DC-DC变换器的精确建模与先进控制方法;②复现并验证权威期刊论文中的关键仿真案例,提升科研创新能力与仿真技术水平;③应用于储能系统能量管理、新能源并网调控、电动汽车充放电模块等高性能电源变换系统的优化设计与动态性能分析。; 阅读建议:建议按照文档目录结构循序渐进学习,优先理解主拓扑的工作原理与控制逻辑,结合所提供的仿真模型进行实操复现,重点关注不同工况下的动态响应、稳定性边界及模式切换过程,深化对电力电子系统协同控制与多时间尺度动态特性的理解。
一个实用的 Codex 技能 lanshu-create-ai-presenter-video专门用来自动化制作数字人讲解视频
一个实用的 Codex 技能 lanshu-create-ai-presenter-video专门用来自动化制作数字人讲解视频。 只需提供一段文案和一张授权人物肖像,它就能串联起配音、口型对齐、镜头剪辑、动态字幕与成片验收。 项目整体设计遵循服务商中立原则,不绑定私有模型或特定 API,可根据环境灵活调度工具。 它以完整配音作为统一的时间轴基准,先进行低成本试片再渲染主素材,有效避免了画面拼接脱节与口型漂移
问题
,并内置了肖像授权预检与重试止损机制,兼顾了生成质量与成本控制。 适合需要在本地或智能体工作流中快速搭建视频生产线的朋友参考使用
基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)
内容概要:本文系统研究了基于序贯蒙特卡洛模拟法的配电网可靠性评估方法,并通过Matlab代码实现了算法的仿真与复现。文章深入阐述了该方法在电力系统可靠性分析中的理论基础,通过模拟电力元件的故障与修复过程的时间序列,对配电网的关键可靠性指标(如系统平均停电频率SAIFI、平均停电持续时间SAIDI等)进行精确统计评估。研究结合IEEE标准测试系统,详细展示了状态转移抽样、时序仿真流程设计及可靠性指标计算等关键技术环节的实现方法。该方法能够有效处理复杂配电网络中元件的随机性、相关性与时序特性,为电网的规划、运行维护及风险评估提供了科学、可靠的决策依据。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事电力系统可靠性分析的工程技术人员。; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在配电网可靠性评估中的应用原理与实现技巧;②学习如何通过时序仿真评估SAIFI、SAIDI等核心可靠性指标;③为电网规划、故障风险分析和运维策略制定提供量化分析工具; 阅读建议:此资源以Matlab代码为核心载体,强调理论与实践的紧密结合,建议读者在学习过程中仔细研读算法原理,动手运行并调试所提供的代码,深入理解状态抽样、时序推进和指标统计的每一个细节,以达到融会贯通的目的。
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章