程序在 UpdateWindow 上崩溃时,使用 SS_OWNERDRAW 动态创建 CStatic
Program crashes on UpdateWindow when dynamically creating CStatic with SS_OWNERDRAW
在初始化对话框中,我动态地创建一些具有SS_OWNERDRAW
样式的CStatic
控件。当我使这些控件可见(WS_VISIBLE
或ShowWindow(SW_SHOW)
(时,程序崩溃。调用堆栈显示方法DrawItem
崩溃的内容。
我不知道为什么,因为我在资源管理器中添加了图片控件,并且没有错误。问题是,我需要根据帧数创建一定数量的控件。
代码片段:
CStatic* frameWnd = new CStatic;
if(frameWnd->Create(_T("my static"), WS_VISIBLE|WS_CHILD | SS_OWNERDRAW, frameRect, this) != 1)
MessageBox("Failed!");
m_oaFrames.Add(frameWnd);
所以,问题是:我应该覆盖DrawItem
方法进行frameWnd
还是有其他解决方案?
若要避免此问题,应创建自定义控件并重写DrawItem
方法,如下所示:
class CPictureCtrl : public CStatic
{
public:
CPictureCtrl() {}
~CPictureCtrl() {}
protected:
virtual void PreSubclassWindow()
{
CStatic::PreSubclassWindow();
ModifyStyle(0, SS_OWNERDRAW);
}
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct){}
private:
};
相关文章:
- 如何在C++中将 chrono::秒转换为 HH:MM:SS 格式的字符串?
- 如何从远程 SFTP 服务器获取 HH-MM-SS 时间戳格式的文件列表
- 如何将时间字符串 (M:SS) 转换为浮点数
- 将 hh:mm:ss.zzz 时间 QString 转换为毫秒的单行函数?
- 格式化时间 c++ dd/mm/yyyy hh:ss.
- 如何在C++中将秒更改为 HH:MM:SS 格式?
- 如何以"hh:mm:ss"格式读取C ++中的HH,MM和SS
- 在 ss.clear() 之后使用 ss.str( " ") 用于新定义的字符串流
- 在 C++11 中表示日内时间 HH:MM:SS 的最佳方法是什么?
- C - 用STD :: difftime编写调度程序 - 如何在白天检查时间(HH:MM:SS)
- 在 C++ 和 FF SS 运算符中配对数据类型
- Qt c++ 聚合'std::stringstream ss'类型不完整且无法定义
- 声明字符串流ss之间的差异;和std::字符串流ss;在C++中
- C++字符串 DD:HH:MM:SS 到整数数据类型
- 如何让 ss << f 像 printf( "%g" , f) 一样工作;
- Ss 类型是什么意思
- 时间格式 HH:MM:SS 输入
- Compiler Optimization with return (std::stringstream ss).str
- Qt seconds to DD HH SS
- 将日期格式Www-Mmm-dd hh:mm:ss yyyy转换为c++中的dd hh:mm:ss字符串