gpt4 book ai didi

c++ - 从 CString 设置 LPSTR

转载 作者:行者123 更新时间:2023-11-28 07:25:07 29 4
gpt4 key购买 nike

我正在尝试在 MFC 对话框上设置工具提示。我有从字符串资源中读取工具提示的代码,我正在尝试将其修改为不从资源中读取,而是编写一个工具提示。

我的实现导致垃圾显示为工具提示,而不是我想要的字符串。此外,它在从调试器运行时导致崩溃,但在直接运行可执行文件时不会导致崩溃(我确定存在缓冲区损坏或类似问题)

这是相关的代码:

BOOL CPreviewDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXT);

TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pNMHDR;

if (!(pTTT->uFlags & TTF_IDISHWND))
return FALSE;

UINT_PTR hWnd = pNMHDR->idFrom;
// idFrom is actually the HWND of the tool
UINT nID = (UINT)(WORD)::GetDlgCtrlID((HWND)hWnd);

CString sDlgItemText;
(UINT)(WORD)::GetDlgItemText(this->GetSafeHwnd(), nID, sDlgItemText.GetBufferSetLength(50), 50);
sDlgItemText.ReleaseBuffer();

if(sDlgItemText.IsEmpty())
sDlgItemText = _T("Unnamed");

CString sToolTip = _T("");
sToolTip.Format(_T("%s \n This is the %s control. Here we can put its description."), sDlgItemText, sDlgItemText);

pTTT->lpszText = sToolTip.GetBufferSetLength(sToolTip.GetLength());/* MAKEINTRESOURCE(nID);*/
pTTT->hinst = AfxGetInstanceHandle();
sToolTip.ReleaseBuffer();
*pResult = 0;

// bring the tooltip window above other popup windows
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);

return TRUE; // message was handled
}

我很确定错误是在我尝试设置 pTTT->lpszText(而不是 MAKEINTRESOURCE)的地方我想我没有从 CString< 中获得设置 LPSTR 的正确方法/p>

CString sDlgItemText;
(UINT)(WORD)::GetDlgItemText(this->GetSafeHwnd(), nID, sDlgItemText.GetBufferSetLength(50), 50);
sDlgItemText.ReleaseBuffer();

if(sDlgItemText.IsEmpty())
sDlgItemText = _T("Unnamed");

CString sToolTip = _T("");
sToolTip.Format(_T("%s \n This is the %s control. Here we can put its description."), sDlgItemText, sDlgItemText);

pTTT->lpszText = sToolTip.GetBufferSetLength(sToolTip.GetLength());/* MAKEINTRESOURCE(nID);*/

最佳答案

我认为你的问题是当你退出该函数后,pTTT->lpszText 中的指针值不再有效。

如果您的文本长度少于 80 个字符,或者如果您有能力截断工具提示,则可以使用

lstrcpy(pTTT->szText, sToolTip);

否则,您需要将 sToolTip 设为全局变量或 CPreviewDlg 类的成员变量。

引用:MSDN article .

关于c++ - 从 CString 设置 LPSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18895712/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com