小编Ton*_*son的帖子

如何在 MFC 虚拟列表控件中设置 ItemData

我有一个所有者绘制的 MFC CListCtrl,我正在尝试将其转换为虚拟列表控件。我的列表中有 30-40,000 个项目,因此虚拟列表控件在速度改进方面完全满足了我的需要。问题是我的列表是所有者绘制的,并且我依靠当前在 SetItemData 中设置的值来正确绘制行。

对于虚拟列表控件,您无法调用 SetItemData。根据 MSDN 文档(https://msdn.microsoft.com/en-us/library/ye4z8x58.aspx),LVN_GETDISPINFO通知消息的处理程序应该询问主项目的 LVIF_PARAM,但事实并非如此。我仔细阅读了其他(非 stackoverflow)论坛,它们也有同样的问题,但似乎没有人知道答案。

触发LVN_GETDISPINFO消息中的LVIF_PARAM有什么技巧?

void CTablePage::OnLvnGetdispinfoList(NMHDR* pNMHDR, LRESULT* pResult)
{
  NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
  LV_ITEM* pItem = &(pDispInfo)->item;

  int iItem = pItem->iItem;

  if (pItem->mask & LVIF_TEXT)
  {
    // this gets hit
  }

  if (pItem->mask & LVIF_PARAM) {
    // this never gets hit
  }
}
Run Code Online (Sandbox Code Playgroud)

mfc clistctrl

6
推荐指数
1
解决办法
1792
查看次数

在C++中以编程方式更改exe的图标

我在 MFC 中创建了一个应用程序,需要为 exe 设置几个图标之一。在应用程序安装在用户的计算机上之前,我不知道要使用哪个图标。我关注了几个网站(包括https://learn.microsoft.com/en-us/windows/win32/menurc/using-resources),了解如何以编程方式执行此操作。

该exe在应用程序的.rc文件中使用的图标是IDR_MAINFRAME (ID 128),并且只是一个标准的.ico文件。运行更新代码后,当我在 Visual Studio 中打开 exe 时,我看到 IDR_MAINFRAME 的图标已更新为正确的图标,但资源管理器中用于 exe 的图像仍然显示旧的(原始)图标。我在更新的 exe 中没有看到任何对原始图标的引用。

我在这里缺少什么?

HGLOBAL hResLoad;   // handle to loaded resource
HMODULE hExe;       // handle to existing .EXE file
HRSRC hRes;         // handle/ptr. to res. info. in hExe
HANDLE hUpdateRes;  // update resource handle
LPVOID lpResLock;   // pointer to resource data
BOOL result;

hExe = LoadLibrary(TEXT("app.exe"));
if (hExe == NULL)
{
  return;
}

// Locate the icon resource in the .EXE file. …
Run Code Online (Sandbox Code Playgroud)

c++ winapi

5
推荐指数
1
解决办法
1233
查看次数

标签 统计

c++ ×1

clistctrl ×1

mfc ×1

winapi ×1