使用Windows API进行编程时,我总是立即HINSTANCE
从WinMain
全局变量创建.如果我想制作一个OK按钮,我会这样做(给定全局HINSTANCE g_hInstance
):
return CreateWindow("BUTTON", "OK", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, 10, 10, 100, 30, exampleParentWindow, EXAMPLECHILDID, g_hInstance, NULL);
Run Code Online (Sandbox Code Playgroud)
但最近我一直看到实例句柄确定,而不必作为参数传递或堵塞全局命名空间,使用GetModuleHandle(NULL)
*调用.所以,上面的例子看起来像这样:
return CreateWindow("BUTTON", "OK", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, 10, 10, 100, 30, exampleParentWindow, EXAMPLECHILDID, GetModuleHandle(NULL), NULL);
Run Code Online (Sandbox Code Playgroud)
*如果您的编译器支持它,您可以编写GetModuleHandle(nullptr)
并且语句将具有相同的结果.
调用GetModuleHandle(NULL)
显式指定实例句柄的优点(如果有的话)是什么?
精细打印:我知道这有一个答案,但它并没有在StackOverflow上作为自己的问题.
是否有任何计划将标准化的回溯和其他调试实用程序添加到C++ 14(或更高版本),还是继续成为OS或编译器添加的功能?
我想这是一个数学问题而不是OpenGL问题,但我离题了.无论如何,如果透视分割的整个目的是获得可用的x和y坐标,为什么还要将z除以w呢?另外我如何在第一时间获得w?
非常自我解释.微软有DirectShow用于DirectX 9,但在DX11上使用DirectShow是一个超越语言的COM噩梦.是否有我没有听说过的视频渲染标准,或者为此目的可能有免费的第三方库?
编辑:感谢Mgetz,我知道微软尝试解决方案Media Foundation.但是,它仅限于Windows 8+,我更愿意避免使用它.
我正在阅读一篇由于RAII之类的文章,你不再需要清理你的代码了.
促成这项研究的是我目前正在编写需要清理的东西才能退出该功能.
例如,我创建了一个文件,并映射了一个文件的视图.
通常,我只是使用goto
或do {break;} while(false);
退出.但是,C++ 11不再需要它吗?
不过了
if( fail ) {
UnmapViewOfFile(lpMapView);
CloseHandle(hFileMap);
CloseHandle(hFile);
}
Run Code Online (Sandbox Code Playgroud)
每几行代码?
一旦函数退出,编译器是否会自动将其包装起来?它似乎很难相信它实际上清理了文章所说的功能调用.(我可能会以某种方式误解它.)更可能的是,它只是通过从C++库调用它们的解构函数来清理创建的类库.
编辑:文章 - 来自维基百科:
这不一定表明它清理这些函数调用,但它确实意味着它为C++库函数的对象(如FILE *
,fopen
等对象)
它也适用于WinAPI吗?