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

标签 java mfc activex ocx jacob

我使用 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/

相关文章:

c# console - 调用和监听 com 事件

c# - 为什么我从 C# 应用程序调用 VB6 ActiveX DLL 失败并返回 "No such interface supported"?

javascript - 以编程方式生成页面时,ActiveX 控件不访问文件系统

java - glassfish 3 错误 404

java - 如何从 cmd 运行具有多个类的 java 程序?

java - Android Recyclerview 滚动更新日历

c++ - 如何使用 Win32/MFC API 提取 .iso 文件?

c++ - 如何 : Display progress dialog using IFileOperation

java - Java 中的双向冒泡排序?

c++ - 如何判断当前窗口是否为事件窗口?