首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用UpdateWindow动态创建CStatic时,SS_OWNERDRAW上的程序崩溃

问题描述: 使用UpdateWindow动态创建CStatic时,SS_OWNERDRAW上的程序崩溃。

解决方案:

  1. 问题分析: 当使用UpdateWindow动态创建CStatic控件时,如果设置了SS_OWNERDRAW风格,程序会崩溃。这是因为SS_OWNERDRAW风格要求在创建控件时提供一个有效的绘制函数指针,但在使用UpdateWindow动态创建控件时,无法提供有效的绘制函数指针,导致程序崩溃。
  2. 解决方法: 为了解决这个问题,可以采用以下两种方法之一:
  3. 方法一:使用CreateWindowEx函数创建CStatic控件 使用CreateWindowEx函数可以动态创建CStatic控件,并且可以设置SS_OWNERDRAW风格。在创建控件时,需要提供一个有效的绘制函数指针,以处理控件的绘制逻辑。具体步骤如下:
    • 调用CreateWindowEx函数创建CStatic控件,指定控件的类名为"STATIC"。
    • 设置控件的风格为SS_OWNERDRAW。
    • 设置控件的位置、大小等属性。
    • 设置控件的父窗口。
    • 设置控件的ID。
    • 设置控件的绘制函数指针,处理控件的绘制逻辑。
    • 方法二:使用自定义的CStatic子类 可以创建一个自定义的CStatic子类,重写其绘制函数,以处理控件的绘制逻辑。具体步骤如下:
    • 创建一个新的CStatic子类,例如CMyStatic。
    • 在CMyStatic类中重写绘制函数,处理控件的绘制逻辑。
    • 在需要使用SS_OWNERDRAW风格的地方,使用CMyStatic类代替CStatic类创建控件。
  • 相关链接:
    • CStatic类文档:https://docs.microsoft.com/en-us/cpp/mfc/reference/cstatic-class?view=msvc-160
    • CreateWindowEx函数文档:https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-createwindowexa?redirectedfrom=MSDN
    • MFC绘制函数指针相关文档:https://docs.microsoft.com/en-us/cpp/mfc/reference/cwnd-class?view=msvc-160#drawing-functions

注意:以上答案仅供参考,具体解决方法可能因具体情况而异。在实际应用中,建议根据具体需求和环境进行调整和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

创建动态,建议使用链接选项Bsymbolic

问题描述 回归正题,前段时间项目开发中,实现了一个动态库,封装了一些方法。然后基于这个动态库,实现了一个应用程序。...应用程序中含有全局变量A,动态库中也含有全局变量A,当我调用动态库中函数后,发现应用程序A发生了变化!!!O,My God!对于我这种还没在Linux下做过开发的人来说,一头雾水。。。。。。...于是我尝试着,将A中变量名称改为B,这样问题也就没有了~~~ 原因 应用程序进行链接时候,动态库中全局变量定义,将会被应用程序中同名全局变量所覆盖。...这样也就造成了,在动态库中修改A变量,应用程序A也发生了变化。 解决方法 在创建动态链接库,gcc/g++选项中添加编译选项 -Wl,-Bsymbolic....其中Wl表示将紧跟其后参数,传递给连接器ld。Bsymbolic表示强制采用本地全局变量定义,这样就不会出现动态链接库全局变量定义被应用程序/动态链接库中同名定义给覆盖了!

1.6K10

使用Qt5.8完成程序动态语言切换遇到问题

因为之前了解过一些Qt国际化东西,所以在写程序时候需要显示给用户字符都使用了 tr(" ")形式,然后使用 Qt Linguist得到相应 qm(Qt message)文件,再通过网上介绍方式...,在 main函数中使用 installTranslator,即可让程序在启动自动判断语言环境,加载相应语言。...至此,静态语言切换已经完成,下面要做动态切换(即不需要重启软件)。...但是这么做出现了问题,因为如果是使用 Qt Designer生成界面,在自动生成 retranslateUI程序(ui_**.h文件)中,会先调用 QComboBox类 clear,再调用 insertItems...不知怎,我就想到把程序启动自动加载相应语言代码改到 MainWindow构造函数中,结果就好了。。。

1.6K40
  • OpenCV 2.2版本号以上显示图片到 MFC Picture Control 控件中

    为此,网上非常多人表示仅仅要将那两个文件人为提取出来然后放到project里面就解决这个问题了,也提供了两个文件下载,可是这麻烦不说。还会导致一些奇奇怪怪报错(至少本人是这种,非常崩溃!)。...DC g_hBmp = CreateDIBSection(g_hMemDC, pbmi, DIB_RGB_COLORS, (void**)&g_pBits, 0, 0);//创建应用程序能够直接写入...然而假设须要进一步优化性能还是大有可为,比方将程序拆分成“初始化”,“主体部分”,“内存释放”三个部分。便不用每次显示图片都进行初始化和内存释放,会进一步提高程序效率。...CreateDIBSection(mybmpobj.g_hMemDC, mybmpobj.pbmi, DIB_RGB_COLORS, (void**)&mybmpobj.g_pBits, 0, 0);//创建应用程序能够直接写入...DC g_hBmp = CreateDIBSection(g_hMemDC, pbmi, DIB_RGB_COLORS, (void**)&g_pBits, 0, 0);//创建应用程序能够直接写入

    55720

    VC2008中处理CStatic控件单击STN_CLICKED消息

    在MFC中,静态文本CStatic控件主要是用来作为标签,即作为注释用。一般情况下不做消息响应。...在VC2008下使用MFC创建了一个基于对话框应用程序。...添加一个CStatic控件,修改其Caption属性为:Number1:      默认情况下MFC中所有新添加静态控件ID是一样,都是IDC_STATIC,如果想要使用某个STATIC控件进行消息响应...,当单击CStatic控件,其值未发生变化,查阅了MSDN中关于Static Controls Messages 中STN_CLICKED 消息,有如下描述: STN_CLICKED This message...原来需要在VS2008中修改ID为IDC_NUMBER1CStatic控件Notify属性(即SS_NOTIFY风格),将其改成TRUE就OK了,默认属性为FASLE,即静态文本控件在默认情况下是不发送通告消息

    1.3K20

    【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”

    读本系列博文读者必须具备以下知识储备: C/C++语言基础语法及了解面向对象概念 窗口在 Windows 中指一个矩形区域,一般情况下这个区域是用户与应用程序交互枢纽;一小节使用 MessageBox...创建简单窗口也是与用户交互一个窗口,该窗口功能有限,只能够简单展示一些想要表达信息,想创建一个能表达更多信息窗口,可以使用 CreateWindow 函数创建。...窗口处理指针:为指向窗体过程函数,为指针,使用 WndProc 处理应用程序在发生事件从 Windows 接收消息,以下将会讲解 WndProc cbClsExtra 窗口类结构后附加字节数...—————————————————————————————————— lpfnWndProc lpfnWndProc 为接收窗口处理指针,使用 WndProc 处理应用程序在发生事件从 Windows...函数请求创建窗口发送。

    1K20

    Windows SDK编程基本框架

    hInstance:应用程序实例,这个参数会从WinMain函数传过来。 hIcon:应用程序图标句柄。 hCursor:应用程序光标句柄。 hbrBackground:窗口背景画刷。...显示并刷新窗口API函数如下,参数都有对应窗口句柄: ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); 进入消息循环 这个过程基本是一个固定格式...如果获取到消息为WM_QUIT,则返回0,于是就退出循环。 通过上面的三部曲,我们就创建了windows程序设计框架,几乎任何windows程序都可以在这个框架基础衍生出来。...,比如WM_CREATE可以处理一些创建工作;WM_PAINT可以处理画图,显示文本;WM_DESTROY处理在窗口被销毁事件;当然还有很多其他消息事件,根据情况我们做出相应处理。...该框架程序运行起来就是一个空空窗口,没有任何其他内容。虽然整个框架简单,但是对于windows程序设计来说非常重要。

    1.7K130

    WPF内存优化

    创建使用这些样式或模板多个控件。 但是,这些控件不使用引用资源。 在这种情况一些内存WeakReference对象和空间泄漏控股数组后,垃圾回收释放该控件。...许多控件创建,一些内存WeakReference对象和容纳数组空格被泄漏后垃圾回收释放该控件。 运行使用树视图控件或控件派生于 WPF 应用程序,选择器类。...因为他只是暂时将应用程序占用内存移至虚拟内存,一旦,应用程序被激活或者有操作请求,这些内存又会被重新占用。...当然,该函数也并非无一是处: 当我们应用程序刚刚加载完成,可以使用该操作一次,来将加载过程不需要代码放到虚拟内存,这样,程序加载完毕后,保持较大可用内存。...程序运行到一定时间后或程序将要被闲置,可以使用该命令来交换占用内存到虚拟内存。 注意 这种方式为缓兵之计,物理内存中数据转移到了虚拟内存中,当内存达到一定额度后还是会崩溃

    1.6K41

    小窗播放视频原理和实现(

    Android应用程序窗口需要请求SurfaceFlinger服务创建绘图表面(也就是Surface对象),同时窗口还需要被WindowManagerService管理;所以实际窗口绘图表面是通过两个...Surface对象来描述,一个是应用程序进程创建,另一个是由WindowManagerService创建,这两个Surface对象对应于SurfaceFlinger服务同一个Layer对象。...(图3 SurfaceViewSurface创建过程) 接下来了解Surface创建过程,如图3时序图所示,每当一个窗口需要刷新UI,就会调用ViewRootImpl类performTraversals...如果当前窗口Surface还没有创建,或者已经失效,SurfaceView就会请求WindowManagerService服务创建一个新Surface,它最终会调用updateWindow来完成Surface...Android NSurfaceView新特性说明,官方也推荐在不执行旋转、透明度、缩放使用SurfaceView。

    10.8K180

    WINDOWS核心编程--Windows程序内部运行机制

    现代桌面应用基本很少使用原始 Windows API 进行开发了,因为使用原始 API 堆砌出来应用代码逻辑非常繁琐,特别是窗口消息处理非常不方便,大多数直接使用 C# 或者 QT 这种跨平台开发库...第四个参数 nCmdShow 指定程序窗口应该如何显示,例如最大化、最小化、隐藏等。这个参数值由该程序调用者所指定,在调用ShowWindow()可以使用到该值。...窗口创建 设计一个窗口类 windows给我们设计好了,只需要做填空,就能创建很好类 结构WNDCLASS包含一个窗口类全部信息,也是Windows编程中使用基本数据结构之一,应用程序通过定义一个窗口类确定窗口属性...函数来创建窗口允许它hInstance参数和注册窗口类传递给 RegisterClass hInstance参数不同。...审批 批准后才能生产 调用RegisterClass注册 只有一个参数----一步骤中所设计窗口类对象指针 创建窗口 用Create Window创建窗口 #define CreateWindowW

    1.5K50

    【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )

    桌面程序 ( Visual Studio Installer 安装 C++ 桌面开发库 | 创建桌面程序 ) 博客中创建 Windows 桌面程序继续向下讲解 , Visual Studio 自动生成了空白桌面程序..., OpenGL 系列开发基于该桌面程序进行 ; 本篇博客简单介绍下该桌面初始化操作 , 注册桌面窗口 , 创建桌面窗口 , 显示桌面窗口 ; 一、导入头文件 ---- Windows 窗口程序需要导入...windows.h 头文件 ; // Windows 头文件 #include 下面的代码 Visual Studio 创建桌面程序时 , 自动生成头文件 , 其中包含了...define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用内容 // Windows 头文件 #include ...); UpdateWindow(hWnd); 六、完整代码示例 ---- Windows 窗口完整代码 , 这是 Visual Studio 自动生成代码 ; // OpenGL.cpp :

    1.2K00

    vs 2010调用matlab dll显示窗口核心代码

    ::SetForegroundWindow(this->m_hWnd); //::UpdateWindow(hFig); //刷新 //::UpdateWindow(myfigure->m_hWnd...R2012b 混合编程 思路:为了实现matlab与C++混合编程,采用由m文件构造动态链接库然后在visual studio中调用方法。...本人系统:Windows 7旗舰版(32位),VS2010旗舰版,Matlab R2012b    只有R2010b或以上版本才识别VS2010编辑器 1. matlab中dll创建          ...,请查帮助,这里只说其中很有用几个:               Myfitline.dll是编译好动态库,myfitline这个函数封装在里面,Myfitline.h是对应头文件,在C里面调用这个函数时候...strNumber.Format(_T("%lf"),c);                   MessageBox(strNumber, _T("坐标"));                   // 后面是一些终止调用程序

    75420

    带你一步步实现可拖拽GridView控件

    经常使用网易新闻童鞋都知道在网易新闻中有一个新闻栏目管理,其中GridViewitem是可以拖拽,效果十分炫酷。...当window位置坐标在GridView里面使用pointToPosition (int x, int y)方法来判断对应应该是哪个item,在adapter中作出数据集相应变化,然后做出平移动画...当用户手指抬起,把window移除,使用notifyDataSetChanged()做出GridView更新。 讲完了思路后,我们就来实践一下吧,把这个控件取名为DragGridView。...然后创建WindowManager.LayoutParams对象,把dragView添加到window上去。同时,也要把长按Item隐藏了。...()之后,我们就要考虑当手指滑动window也要跟着动了,我们重写onTouchEvent(MotionEvent ev)来监听滑动事件,可以看到下面的updateWindow(ev)方法。

    1.1K20

    CWnd派生类-3、CDialog类

    但对话框使用,只是方便了窗体和控件创建过程,其本质与普通窗体无任何区别。 下面并不准备陈述对话框技术细节,只与读者讨论两个相关问题:一是模态对话框消息循环,二是对话框命令消息路由。...7.4 模态对话框消息循环 模态对话框是程序中最常用窗口,当调用对话框DoModal()成员后,就创建了一个模态对话框。其特点是,除了这个对话框窗体外,几乎不能操作程序其他部分。...即当模态对话框弹出,禁止了它父窗口及大部分兄弟窗口操作;模态对话框关闭后,被禁用窗口将恢复使用。...其实,由RunModalLoop()实现模态循环,并不是创建模态窗口或模态对话框方式。如上所述,只要在对话框创建之前禁止主窗口,在对话框销毁激活主窗口,在形式就已经实现了所谓模态对话框。...(1)调用EnableWindow()禁止程序主窗口。如果当前存在多个主窗口,禁止与该模态窗口有所属关系主窗口。 (2)使用CWnd::Create()等创建命令,创建该窗口。

    1.3K30

    Python 高级编程

    1、通过列表创建。...只有当多核多线程处理任务,这两个线程被分配到不同执行时,这两个任务才是并行。 并发和并行区别就是一个人同时吃三个馒头和三个人同时吃三个馒头区别 ?...该方式主要用于在Python中调用动态链接库(.dll、.so),当不需要在C代码中反调用Python代码,推荐使用,简单高效。...使用这种方式,编写动态库无需为Python特别处理,就和编写普通动态库一样。 2.使用Python提供一组特定C API(声明在Python.h中),用C语言为Python编写模块。...需要注意一点,为Python写C扩展,解释器版本需和编译出程序版本匹配,也就是说,本地解释器是32位,编译出C扩展程序也必须是32位,64位亦然。

    1.3K70

    OD常用断点 ^_^ 很全很全

    常用断点(1) 拦截窗口: bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口...不知道在win2k,以上常用中断函数是什么了? 也就是问密码、时间、窗口、ini、key、注册表、加密狗、光盘、软盘、限制等! 了解常用中断,对破解分析可以做到事半功倍! 请大家说一下!...它只是显示在另一个制作文件,可是*.htm *.exe等) C.才是最难搞,也是很多人想知道!包括我在内。不知道高手们有何提示了?...NT/2000下这个断点,当edx=1f0h,,可以看见EDI地址内数据为扇区位置数据,必须先 在winice.dat 中装入hal.sys 详细内容看ATAPI手册 补充篇: 关于对VB程序和时间限制程序断点...__vbaVarTstNe 注意:VB程序仍然可以使用普通API函数,只要函数“最终”CALL了这个函数 上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可

    1.1K30
    领券