gpt4 book ai didi

java - 我可以从 Jacob 设置 hwnd 吗?

转载 作者:行者123 更新时间:2023-12-01 08:57:04 26 4
gpt4 key购买 nike

我使用 CWnd::SetTimer(MFC ActiveX COM) 但断言没有 hwnd。我可以从 Jacob 设置 hwnd 吗?这是断言代码。

Afxwin2.inl 第 152 行。

_AFXWIN_INLINE UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT nElapse,
void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD))
{ ASSERT(::IsWindow(m_hWnd)); return ::SetTimer(m_hWnd, nIDEvent, nElapse,
lpfnTimer); }

最佳答案

取自电影《妈妈先生》中的不朽名言:“你做错了。”

不,你不能从 Jacob 设置 hwnd。我很感兴趣你如何调用 CWnd::SetTimer()。它应该始终来自已创建并具有与其关联的 m_hWnd 的窗口。因此,假设您有一个有效的窗口,您可以调用:

// assume pWnd is a CWnd* or derived object that has been created.
pWnd->SetTimer(nIDEvent, nElapse, NULL);

CWnd(或派生的)必须已经创建。所以,你有一些选择......

假设你已经有一个 HWND hwnd....

你应该有一些类,并且从该类中你可以调用 SubclassWindow...

CSomeWindow someWindow; // declaring these on stack probably bad idea
someWindow.SubclassWindow(hwnd);
someWindow.SetTimer(nIDEvent, nElapse, NULL);

另一个选项是您创建窗口...

CSomeWindow someWindow; // declaring these on stack probably bad idea
someWindow.Create(.... create params);
someWindow.SetTimer(nIDEvent, nElapse, NULL);

CSomeWindow* pSomeWindow = new CSomeWindow();
pSomeWindow->Create(.... create params);
pSomeWindow->SetTimer(nIDEvent, nElapse, NULL);

在上面的例子中,没有提供任何函数——只是 NULL。在这种情况下,它将路由到您的 ON_WM_TIMER() 处理程序。

OTOH,也许您有一个窗口(您的 OCX 控件?),您想要为其设置计时器。好吧,您只想确保在创建窗口(HWND)之后调用它。在创建 OnCreate() 方法之后的某个时间。这可能是你的问题,但你的信息很少,而我只是在黑暗中刺探。

pYourOcx->SetTimer(nIDEvent, nElapse, NULL);

但是,从技术上讲,您甚至不需要窗口。您可以调用 Windows API 版本的 SetTimer()...

::SetTimer(NULL, nIDEvent, nElapse, MyTimerFunc); // MyTimerFunc is your user defined timer function

关于java - 我可以从 Jacob 设置 hwnd 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41977845/

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