我正在使用Visual C ++ 2008编写Windows应用程序,我想在其中嵌入Windows附带的计算器(calc.exe)。有谁知道这是否可能,如果是的话,你可以给我一些关于如何实现这一目标的提示吗?
答案 0 :(得分:5)
是的,可以将calc嵌入到您自己的应用程序中,但它仍然会在它自己的进程空间中运行。 UAC可能还会施加一些限制,但这取决于计算方法的推出方式。您需要做的就是更改主计算窗口的父级,并将其样式更改为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);
}
}
答案 1 :(得分:3)
Microsoft拥有各种支持嵌入的技术,最着名的是基于COM技术的OLE。例如,您可以在应用程序中嵌入Excel电子表格。但是,我很确定calc没有实现任何所需的接口。
所以这只会给你带来hacky解决方案,例如尝试自己启动它并使用窗口层次结构玩游戏,或尝试将其呈现给用户,然后通过剪贴板等将结果复制出来。这在技术上是可行的,但不是一个好主意。事实上,它可能比编写自己的计算器应用程序更困难...取决于您希望用户做什么。如果你解释为什么要这样做,有人可能会有一些更好的解决方案。