• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2025-12-13 14:10 Aet 隐藏边栏 |   抢沙发  5 
文章评分 1 次,平均分 5.0

某程序替换图片资源,发现还是显示旧的

简述

  1. 替换了程序的一些背景图片,安装图片
  2. 编译后发现还是显示旧资源的内容
    1. 清理visual studio项目缓存,重新编译还是显示旧资源内容

分析

  1. 资源替换成功了,重新编译了,还显示旧内容,那说明跑起来的程序内部的资源本身就是旧的内容
  2. 也就是,调起来的程序不是新编的程序

原因

  1. 发现debug模式指定了命令行参数/debugfile=xxx.exe,该exe是其他程序打包出来的
  2. 需要把新编出来的程序,替换到xxx.exe的打包目录,重新编xxx.exe

窗口阻塞问题

简述

  1. 主线程先后创建了窗口A,和主窗口B
  2. 点击了主窗口B的某个按钮后,启动了一个异步线程
    1. 该线程中给窗口A使用SendMessage发送了一个消息
    2. 后面主界面发生了阻塞

分析

  1. 因为, 窗口属于创建它的线程
    1. 所以,这两个窗口的HWND都属于主线程
    2. 所以,发生了阻塞,实际就是主线程发生了阻塞
    3. 所以,把程序附加到visual studio上,手动触发阻塞,然后暂停程序,应该在线程列表里面切换到主线程,查看主线程的堆栈信息
  2. 关于简述问题
    1. 上面描述的问题,最后查看主线程的堆栈,显示某个控件的*Draw*函数
    2. 也就是说,点击那个按钮后,执行的代码里面有相关图片处理逻辑
    3. 查看代码发现,调用了SetVisible,通过bRedraw参数触发了重绘,而重绘的时候调用相关*Draw*函数
    4. 继续查看ing_group_相关代码发现,设置了图片A,进度条图片B,文本CD
    5. 图片A在点击触发按钮之前已经展示过,且此处处理图片B的代码和之前处理图片A的代码是一样的
    6. 文本CD也是和之前处理文本的代码一样
    7. 虽然处理图片B的代码和处理图片A的代码是一样的,但是图片B没有展示过,怀疑图片B有问题
    8. 查看本地图片B文件,发现名字没对上,拷贝过去后没有改名字,和资源指向路径里名字不一致
    9. 修改图片B的名字,解决了问题

其他

  1. 关于线程和窗口
    1. 窗口属于创建它的线程
  2. 关于消息循环
    1. 一个线程可以有多个消息循环,但同一时刻只能运行一个
    2. 多个窗口可以共享同一个消息循环

  1. 关于消息队列
    1. 每个线程只有一个消息队列(系统级)
  2. 关于消息循环和窗口过程相关代码
    1. 一个窗口类里面,只看到了窗口过程相关的代码,如BEGIN_MSG_MAP_EX,END_MSG_MAP
    2. 只能说明该窗口有消息处理的能力,而不能说该窗口有消息循环

A库调用BfuncD函数,却触发了BfuncB函数的断点

简述

  1. A库是个DLLB库是个lib
  2. A库里面某个类继承了接口类

  1. B类里面继承了接口类

原因

  1. A库项目使用了B库生成的lib静态库
  2. A库的IInterface.h少了几个函数,和B库的IInterface.h内容不一样
  3. 最后同步了一下接口文件的内容解决问题

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2026-01-16
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享