gpt4 book ai didi

c++ - 使用 SS_OWNERDRAW 动态创建 CStatic 时程序在 UpdateWindow 上崩溃

转载 作者:行者123 更新时间:2023-11-28 04:16:00 40 4
gpt4 key购买 nike

在初始化对话框中,我动态创建了一些具有SS_OWNERDRAW 样式的CStatic 控件。当我使这些控件可见(WS_VISIBLEShowWindow(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);

所以,问题是:我应该重写 frameWndDrawItem 方法还是有其他解决方案?

最佳答案

要避免此问题,您应该创建自定义控件并覆盖 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++ - 使用 SS_OWNERDRAW 动态创建 CStatic 时程序在 UpdateWindow 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56652862/

40 4 0
文章推荐: html - 如何在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com