我期待有vista / win7使用Aero风格的窗口,而XP用户使用正常的窗口风格(如何得到Windows XP stlye而不是win95风格btw?)
这个想法是这样的:
OsveRSIONINFOEX osvi; osvi.dwOsversionInfoSize = sizeof(OsveRSIONINFOEX); GetVersionEx((OsveRSIONINFO*)&osvi); if (osvi.dwMajorVersion > 5) { #pragma comment(linker,"/manifestdependency:"type='win32' " "name='Microsoft.Windows.Common-Controls' " "version='6.0.0.0' " "processorArchitecture='x86' " "publicKeyToken='6595b64144ccf1df' " "language='*' " """) }
现在,不pipeif语句是真还是假,#pragma都会被执行,我猜这就是#pragma的工作方式。 当然还有一些其他的方式来得到这个工作(像#ifndef #define … #endif我猜)
干杯
如何直接与硬件交互?
有没有办法确定一个Linux的PID是否暂停?
如何在C / C ++中以编程方式在外部USB HD上启用“更好的性能”
有没有可选的标签控制?
如何通过C ++程序在Windows Server 2008/2012上初始化磁盘
在listBoxes vba中获得一致的伪列
下拉select控制 – Windows 8 Metro – XAML
停止并使用C ++在Linux中重新开始运行进程
设置ALSAstream的音量
C#Windows窗体:循环浏览dynamic创build的文本框,并检查是否已更改文本
您正在编译时间评估杂注与运行时代码的执行。 显然这是行不通的。
可以在“PutYourProgramNameHere.exe.manifest”文件中保留应用程序的清单。 因此,如果您需要XP和Vista / Win7的不同清单,则可以在目标计算机上安装应用程序时安装不同的清单文件。 即您的安装程序检查操作系统版本并安装匹配清单。
您可以使用Activation Context API函数来执行此操作。 要求是:
使用LoadLibrary & GetProcAddress实际加载有问题的API函数,因为它们在NT 5.1之前不存在
将包含comctl 6依赖项的清单嵌入资源ID> 16的资源中,或者将其作为磁盘上的文件。
此示例代码假定清单被嵌入为RT_MANIFEST资源,其ID为17.TestOsversion()是您决定是否要使用蒙版窗口的函数。
ACTCTX actx = {0}; actx.cbSize = sizeof(ACTCTX); actx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID | ACTCTX_FLAG_HMODULE_VALID; actx.lpResourceName = MAKEINTRESOURCE(17); actx.hmodulee = GetmoduleeHandle(NULL); // assumes the manifest is exe embedded. HANDLE hactx = INVALID_HANDLE_VALUE; if(TestOsversion()) hactx = CreateActCtx(&actx); ULONG_PTR actxCookie = NULL; if (hactx != INVALID_HANDLE_VALUE) ActivateActCtx(hactx,&actxCookie); // Now,with the activation context active,create the dialog Box // or window or whatever. HWND hwndDialog = CreateDialogBoxParam(...); // and pop the context. It doesn't matter if the dialog still exists,the // ctl6 dll is Now loaded and serving requests. if (hactx != INVALID_HANDLE_VALUE) DeactivateActCtx(0,actxCookie);
显然,为了使这个工作,v6公共控制不能在进程默认清单。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。