我希望有一个简单的问题 - 当异常发生时,如何在try块中分配一个空闲内存?请考虑以下代码:
try
{
char *heap = new char [50];
//let exception occur here
delete[] heap;
}
catch (...)
{
cout << "Error, leaving function now";
//delete[] heap; doesn't work of course, heap is unknown to compiler
return 1;
}
Run Code Online (Sandbox Code Playgroud)
如何在分配堆之后释放内存并在调用之前发生异常delete[] heap?在这些try .. catch块中是否有规则不在堆上分配内存?
我有这个类构造函数:
Pairs (int Pos, char *Pre, char *Post, bool Attach = true);
Run Code Online (Sandbox Code Playgroud)
如何初始化Pairs类的数组?我试过了:
Pairs Holder[3] =
{
{Input.find("as"), "Pre", "Post"},
{Input.find("as"), "Pre", "Post"},
{Input.find("as"), "Pre", "Post"}
};
Run Code Online (Sandbox Code Playgroud)
显然它不起作用,我也尝试使用()括号而不是{}但编译器一直保持呻吟.对不起,如果是蹩脚的问题,我google了相当努力,但无法找到答案:/
我对 CreateWindowEx 函数有疑问。我有 2 个窗口,一个主窗口和一个弹出窗口。我想要一个弹出窗口隐藏在任何地方。它当前未显示在任务栏中,甚至在 alt+tab 菜单中也不可见。但是它在任务管理器的“应用程序”选项卡上可见。我需要在 CreateWindowEx 中使用哪些标志来隐藏我的弹出窗口?
当前代码:
hHistoryWindow = CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE | WS_EX_LAYERED, szAppName, L"HistoryWindow", WS_EX_TOPMOST | WS_POPUP, WIDTH, TOP, width, height, NULL, NULL, hInstance, NULL);
Run Code Online (Sandbox Code Playgroud)
我还想问一下,在使用DestroyWindow()函数之前,是否需要从“静态”窗口释放位图资源?我通过这种方式将图像设置为“静态”窗口:
SendMessage (hStatic, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hWhiteStone);
Run Code Online (Sandbox Code Playgroud)
释放 hWhiteStone 是否足够,或者我是否还需要释放 SendMessage() 返回的句柄(- 或者它是否由 DestroyWindow 自动完成)?
感谢您提供任何信息。
克拉
我需要以某种方式获得(固定)窗口边框大小的宽度(垂直方向).默认情况下,WinXP上的它非常薄,但是搭载Aero的Win7,它的厚度要大得多.
我认为GetSystemMetrics可以做到这一点,但似乎它为XP和Win7系统返回相同的值,我检查了以下参数:
SM_CXBORDER
SM_CXEDGE
SM_CYFIXEDFRAME
SM_CYBORDER
SM_CXFIXEDFRAME
Run Code Online (Sandbox Code Playgroud)
但正如我所写,无论垂直窗口边界实际有多厚,它们都会为两个操作系统返回相同的值.窗口是用标志创建的,WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX如果有任何帮助(它不大).
谢谢你的任何想法.
克拉