老调重谈,拖动控件重绘的问题怎么解决?

_Sodo_ 2011-03-11 09:56:55
我在一个全屏透明的自定义控件上动态创建了一个透明自定义控件,给这个动态创建的自定义控件贴了背景图片,我要拖拽移动这个控件,可是出现的效果让人恶心,控件移动的每一步都在窗体上显示出来了,一个个叠加,出现很多个控件,我认为是重绘的问题,大家来看看问题出在哪,帮解决下,我提前先谢谢你们。

//全屏透明自定义控件代码,CTransprentPanel.cpp: 实现文件
void CTransprentPanel::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CWnd::OnPaint()
}

//
void CTransprentPanel::OnLButtonUp(UINT nFlags, CPoint point)
{
unitWnd = new CUnitPanel();//创建一个自定义控件
unitWnd->Create(_T("CTransprentPanel"),_T("UnitPanel"),CS_HREDRAW | CS_VREDRAW | CS_OWNDC,m_rectInfo,panel,IDC_CUSTOM_NEWUNIT);
unitWnd->ShowWindow(SW_SHOW);
unitWnd->DrawTransprentWnd(unitWnd->GetSafeHwnd(),200);//调用此函数使控件透明
}


//动态创建的这个自定义控件代码, UnitPanel.cpp : 实现文件

/*传进指定的窗口句柄,使其窗口透明*/
BOOL CUnitPanel::DrawTransprentWnd(HWND hWnd,BYTE transprt)
{
//m_brush.CreateSolidBrush(RGB(255,0,255));//背景设置为粉红色

//设置背景
SetClassLong(m_hWnd,GCL_HBRBACKGROUND,NULL);

//SetWindowsLong将窗体设置为层级窗体
DWORD dwExStyle = GetWindowLong(hWnd,GWL_EXSTYLE);//获取窗体信息
SetWindowLong(hWnd,GWL_EXSTYLE,dwExStyle|0x80000);//去掉当前窗口一个属性,原属性和

//设置透明色:
//用SetLayeredWindowAttributes设置透明色为0,它比UpdateLayeredWindow的使用要简单些
HMODULE hInst= LoadLibrary(_T("User32.DLL"));//加载动态链接库

typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);//定义函数指针类型
MYFUNC SetLayeredWindowAttributes = NULL;//定义一个该函数指针类型的变量

//得到动态连接库的SetLayeredWindowAttributes函数,用SetLayeredWindowAttributes指向它
SetLayeredWindowAttributes = (MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");

SetLayeredWindowAttributes(hWnd,0,transprt,2);//调用SetLayeredWindowAttributes函数
//SetLayeredWindowAttributes(hWnd,0,transprt,ULW_ALPHA);
FreeLibrary(hInst);//释放DLL
return true;
}

BOOL CUnitPanel::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

return CWnd::OnEraseBkgnd(pDC);
}

void CUnitPanel::OnPaint()
{

CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码

/*CTransprentPanel * panel = new CTransprentPanel();*/
Graphics graphics(this->m_hWnd);//Graphi
TCHAR EXEPULLPATH[MAX_PATH];
GetModuleFileName(NULL,EXEPULLPATH,sizeof(EXEPULLPATH));
CString strCurDir = EXEPULLPATH;
strCurDir = strCurDir.Left(strCurDir.ReverseFind('\\'));
strCurDir = strCurDir.Left(strCurDir.ReverseFind('\\'));
strCurDir += "\\Image\\Blue\\单元窗口.png";
Image img(strCurDir);
graphics.DrawImage(&img,0,0,m_rectInfo.Width(),m_rectInfo.Height());

// 不为绘图消息调用 CWnd::OnPaint()

}
/*通过此响应事件移动控件*/
void CUnitPanel::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

//禁止显示移动矩形窗体框
::SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,TRUE,NULL,0);
//非标题栏移动整个窗口
SendMessage(WM_SYSCOMMAND,0xF012,0);
//PostMessage(WM_PAINT,HTCAPTION,MAKELPARAM(point.x,point.y));
CWnd::OnLButtonDown(nFlags, point);
}
...全文
204 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2011-04-01
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
普通网民 2011-04-01
  • 打赏
  • 举报
回复
小弟弟,用双缓冲呀!WS_CLIPCHILDREN WS_CLIPSIBLINGS 效果有没?
hztj2005 2011-04-01
  • 打赏
  • 举报
回复
我想你不能用OnLButtonDown响应,应该用OnLButtonUp响应事件移动控件:


void CUnitPanel::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

//禁止显示移动矩形窗体框
::SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,TRUE,NULL,0);
//非标题栏移动整个窗口
SendMessage(WM_SYSCOMMAND,0xF012,0);
//PostMessage(WM_PAINT,HTCAPTION,MAKELPARAM(point.x,point.y));
CWnd::OnLButtonDown(nFlags, point);
}
Eleven 2011-03-11
  • 打赏
  • 举报
回复
父窗口设置WS_CLIPCHILDREN属性试试

BOOL CUnitPanel::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

return CWnd::OnEraseBkgnd(pDC);
}
直接return TRUE;
_Sodo_ 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xianglitian 的回复:]

这个效果你觉得可以么?
http://blog.csdn.net/xianglitian/archive/2010/11/20/6023656.aspx
[/Quote]

好像不行,我的这个是个透明的自定义控件,贴图模拟不规则窗体,然后上面还要承载其它控件,郁闷了。
向立天 2011-03-11
  • 打赏
  • 举报
回复
_Sodo_ 2011-03-11
  • 打赏
  • 举报
回复
谁能告诉我是什么问题造成的?如果看不懂要看源码我上传,急急急。
east_0012 2011-03-11
  • 打赏
  • 举报
回复
等待牛人
_Sodo_ 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 visualeleven 的回复:]

父窗口设置WS_CLIPCHILDREN属性试试

BOOL CUnitPanel::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

return CWnd::OnEraseBkgnd(pDC);
}
直接return TRUE;
[/Quote]

不行呀,大哥!
内容概要:本文提出了一种基于多时段动态电价的电动汽车有序充电策略优化方法,并通过Matlab代码实现对该策略进行仿真验证。该研究聚焦于缓解大规模电动汽车无序充电对电网造成的峰谷负荷压力,通过设计科学的多时段动态电价机制,引导用户在电网负荷低谷时段充电,从而实现削峰填谷、提升电网运行稳定性与可再生能源消纳能力的目标。文中建立了以电网负荷波动最小化和用户充电成本最低化为双重目标的优化模型,结合实际用电数据开展仿真分析,结果表明该策略能显著降低电网峰谷差,提高电力系统的经济性与运行效率。该资源属于“博士论文复现”系列,强调对高水平学术成果的还原与工程化实践,具有较强的理论深度与应用价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事新能源、智能电网、电动汽车等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①学习并复现已发表于博士论文或高水平期刊中的电动汽车有序充电优化模型;②研究需求响应机制下电价策略对用户充电行为的引导作用与弹性响应特性;③开发基于动态电价的充电管理系统原型,为智慧能源系统与车网互动(V2G)技术提供算法支持与决策依据; 阅读建议:此资源以Matlab代码为核心,建议读者结合文档内容与代码逐行分析,重点关注目标函数构建、约束条件设定及求解器调用过程,同时尝试修改参数或引入新变量以拓展模型适用范围,加深对优化算法与电力市场机制融合的理解。
内容概要:本文针对传统三电平并网逆变器在谐波抑制、电网不平衡适应性及动态响应方面的不足,提出一种基于有源中点箝位(ANPC)三电平拓扑的高性能并网控制策略。通过融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术与电网电压前馈控制,构建“精准同步-扰动补偿-优质调制”的一体化控制体系。ANPC拓扑凭借其开关损耗均衡、中点电位稳定和低输出谐波等优势,为系统提供优良的硬件基础;DPWMA调制在不增加器件开关频率的前提下显著提升等效开关频率,优化并网波形质量;正负序分离锁相技术有效隔离电网负序扰动,保障不平衡工况下的锁相精度与电流对称性;电网电压前馈控制则提前补偿电网扰动,显著增强系统的动态抗扰能力和响应速度。通过Matlab/Simulink搭建仿真模型,在稳态运行、电网不平衡及动态扰动等多种工况下进行验证,结果表明该复合控制策略可大幅降低并网电流谐波含量,提升功率稳定性与系统鲁棒性,适用于复杂电网环境下的大功率高质量并网应用。; 适合人群:具备电力电子、自动控制理论基础,从事新能源发电、并网逆变器研发等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究高电能质量并网逆变器的控制策略设计;②解决弱电网条件下并网系统的稳定性与适应性问题;③掌握DPWMA调制、正负序分离锁相、前馈-反馈复合控制等关键技术的实现方法与协同机制。; 阅读建议:建议结合Matlab/Simulink仿真模型进行实践,重点理解控制策略在不同扰动工况下的响应特性,并可通过修改参数对比传统控制方法,深入掌握复合控制策略的优势与工程应用价值。
内容概要:本文系统研究了在间歇性光伏出力条件下,48V直流母线电压的稳定控制策略及储能系统的双向充放电闭环调控体系。通过Simulink搭建完整的光伏储能直流系统仿真模型,涵盖PV光伏阵列、Boost DC-DC变换器、负载、双向DC-DC变换器与锂离子电池系统,重点实现光伏最大功率点跟踪(MPPT)技术与储能系统协同的削峰填谷控制策略,以解决离网光伏直流微网中存在的功率供需失衡问题。研究深入探讨了电压外环与电流内环的双闭环PI控制结构,确保母线电压稳定,并通过双向DC-DC变换器实现储能电池的智能充放电管理。为进一步提升系统对可再生能源波动性的适应能力,引入多维核密度估计方法生成典型光伏与负荷场景,增强了控制策略的鲁棒性与实用性。; 适合人群:具备电力电子、新能源系统或自动化等相关专业背景,从事微电网、储能控制、光伏系统仿真与能量管理研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于离网或分布式直流微网系统中电压稳定与能量管理策略的设计与验证;②为光伏-储能系统的协同控制、MPPT算法优化、储能充放电调度等提供高保真仿真平台与理论支持;③支撑科研项目申报、高水平论文复现或实际工程项目的系统建模与控制算法开发。; 阅读建议:建议结合Simulink仿真环境动手实践,重点关注MPPT控制模块、双向DC-DC变换器的充放电逻辑及双闭环PI控制器的参数整定过程,同时可拓展引入概率性场景分析或多目标优化算法以进一步提升系统性能与智能化水平。

15,977

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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