3

我正在用 Visual C++ 2008 编写一个 Windows 应用程序,我想在其中嵌入 Windows 附带的计算器 (calc.exe)。有谁知道这是否可行,如果可行,您能否给我一些提示,告诉我如何实现这一目标?

4

2 回答 2

6

是的,可以将 calc 嵌入到您自己的应用程序中,但它仍将在自己的进程空间中运行。UAC 也可能会施加一些限制,但这取决于 calc 的启动方式。您需要做的就是更改主计算窗口的父级并将其样式更改为 WS_CHILD。

void EmbedCalc(HWND hWnd)
{
    HWND calcHwnd = FindWindow(L"CalcFrame", NULL);
    if(calcHwnd != NULL)
    {
        // Change the parent so the calc window belongs to our apps main window 
        SetParent(calcHwnd, hWnd);

        // Update the style so the calc window is embedded in our main window
        SetWindowLong(calcHwnd, GWL_STYLE, GetWindowLong(calcHwnd, GWL_STYLE) | WS_CHILD);

        // We need to update the position as well since changing the parent does not
        // adjust it automatically.
        SetWindowPos(calcHwnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
    }
}
于 2013-05-20T02:00:49.390 回答
3

Microsoft 有多种技术来支持嵌入,最著名的是 OLE,它是一种基于 COM 的技术。例如,这就是如何在应用程序中嵌入 Excel 电子表格。但是,我相当肯定 calc 没有实现任何必要的接口来实现这一点。

所以这只会给你留下一些棘手的解决方案,比如尝试自己启动它并使用窗口层次结构玩游戏,或者尝试将其呈现给用户然后通过剪贴板复制结果等。这在技术上都是可行的,但不是一个好主意。事实上,这可能比编写自己的计算器应用程序更难……这取决于你想让用户做什么。如果您解释为什么要这样做,有人可能会提出一些更好的解决方案。

于 2013-05-18T17:51:34.613 回答