gpt4 book ai didi

c++ - 如何将 reinterpret_cast(reinterpret_cast(lParam)->hwndParent) 转换为 VB6?

转载 作者:行者123 更新时间:2023-12-05 01:49:32 33 4
gpt4 key购买 nike

我需要将一段代码从 C++ 转换为 VB6。

具体来说,这个:

reinterpret_cast<WPARAM>(reinterpret_cast<LPCREATESTRUCT>(lParam)->hwndParent)

有人能告诉我这在 VB6 中会是什么样子吗?我在 C++ 方面经验不足,无法理解这到底是做什么的。

非常感谢!

关于本题的背景:

在 Visual Basic 6 中使用的控件似乎没有完整的 Unicode 支持。为什么?Visual Basic 6 创建的窗体是 ANSI 窗口。因此,它们强制控件的底层本地 TreeView 窗口类在与窗体通信时使用 ANSI 消息。这在某些情况下会破坏 Unicode 支持。要变通解决此问题,WM_NOTIFYFORMAT 消息必须反射(reflect)回控件。在 Visual Basic 中,您必须子类化控件的容器窗口并将 WM_NOTIFYFORMAT 发送回它被发送到的窗口。在 C++ 中,消息反射的工作方式类似。

LRESULT ExplorerTreeView::OnCreate(UINT message, WPARAM wParam, LPARAM lParam, BOOL& /*wasHandled*/)
{
LRESULT lr = DefWindowProc(message, wParam, lParam);

if(*this) {
// this will keep the object alive if the client destroys the control window in an event handler
AddRef();

/* SysTreeView32 already sent a WM_NOTIFYFORMAT/NF_QUERY message to the parent window, but
unfortunately our reflection object did not yet know where to reflect this message to. So we ask
SysTreeView32 to send the message again. */
SendMessage(WM_NOTIFYFORMAT, reinterpret_cast<WPARAM>(reinterpret_cast<LPCREATESTRUCT>(lParam)->hwndParent), NF_REQUERY);

Raise_RecreatedControlWindow(HandleToLong(static_cast<HWND>(*this)));
}
return lr;
}

最佳答案

这只是控件所在窗体的句柄,您可以用 Me.hWnd 替换该代码。

关于c++ - 如何将 reinterpret_cast<WPARAM>(reinterpret_cast<LPCREATESTRUCT>(lParam)->hwndParent) 转换为 VB6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74082951/

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