【问题标题】:LoadImage() with variable path? [duplicate]LoadImage() 与可变路径? [复制]
【发布时间】:2017-10-23 20:10:42
【问题描述】:

如何让LoadImage(); 使用可变文件路径?我在变量bg 中有所需的文件路径,我正在调用该函数:
bmp = LoadImage(hInst,bg,IMAGE_BITMAP,640,480,LR_LOADFROMFILE);

然而bmpBitBlt(hDC,0,0,640,480,memDC,0,0,SRCCOPY); 一起使用时不会呈现任何图像


如果我不能使用LoadImage();,有什么等价物可以处理非常量文件名?


[编辑]

显然,错误是由另一段代码引起的,而不是 LoadImage() 函数。不服气。

【问题讨论】:

  • LoadImage(hInst,bg,IMAGE_BITMAP... 被调用时,bg[] 是什么?没有调用 md0() 来填充它。
  • 应用程序是否崩溃,或者您的图像根本不显示?您确定您的计时器正常触发吗?
  • 如果你想找出你的程序出了什么问题,你应该调试它。如果今天不再调试程序,程序员为什么还要调试?
  • 您的WM_PAINT 正在泄漏内存(您没有恢复被SelectObject() 替换的HBITMAP。您必须在调用DeleteDC() 之前再次调用SelectObject()),并使用PostMessage()触发油漆处理程序是错误的。请改用InvalidateRect(),并让操作系统在准备好时触发WM_PAINT
  • 请提供minimal reproducible example。故意难以阅读的代码(例如通过函数指针的间接函数调用)不是很有帮助。

标签: c winapi


【解决方案1】:

它似乎是计时器。关于 SetTimer 函数的文档说第二个参数 (nIDEvent) 必须是 非零 值。所以,我想你的计时器永远不会触发,execmain() 函数永远不会被调用,所以你的bg 字符串永远不会被设置。

当您将bg 替换为字符串文字时,它会起作用,因为WM_PAINT 消息不依赖于计时器,它总是在创建窗口时至少调用一次。

【讨论】:

  • 我将定时器ID设置为1001,但还是不行。我还能尝试什么?
  • 您是否已经尝试使用InvalidateRect() 而不是手动发送WM_PAINT 消息?
  • 是的,这行得通。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 2016-06-04
  • 2021-09-19
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多