gpt4 book ai didi

c++ - Win32。在 dll 中启用视觉样式

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:13 25 4
gpt4 key购买 nike

我没有 C++ 和 Win API 方面的经验,如果这个问题是新问题,我很抱歉。我有 DLL,我可以在其中创建一些组件,例如 MessageBox。我添加了 pragma 注释以启用视觉样式,但它不起作用(我从这个答案中知道它不应该:windows 7 style for combobox on internet explorer toolbar, how?

Dll代码(省略export等):

#include "stdafx.h"
#include "my-dll.h"
#include <Windows.h>
#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

MYDLL_API int fnmydll(void)
{
MessageBox(NULL, L"Message", NULL, 0);
return 42;
}

然后我从我的应用程序调用这个 dll 函数:

#include <iostream>
#include <Windows.h>
#include "my-dll.h"

int WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
fnmydll();
return 0;
}

我有我的消息框,但没有视觉样式。据我所知,我应该在调用我的 dll 时激活上下文,但 MSDN 没有如何执行此操作的示例。你能给我这样的例子,或者至少更详细地解释一下发生了什么吗?因为我什至不明白为什么函数 BOOL GetCurrentActCtx(_Out_ HANDLE *lphActCtx); 接收指向 ACTCTX 的指针,但具有某些 HANDLE 类型的签名.

最佳答案

如果您希望您的 DLL 使用视觉样式感知控件,即 comctl32 v6,即使您的主机应用程序不使用它,您也必须使用 Activation Context API。以下是如何使用它的示例:

 HANDLE hActCtx;
ACTCTX actCtx;
ZeroMemory(&actCtx, sizeof(actCtx));
actCtx.cbSize = sizeof(actCtx);
actCtx.hModule = hInst;
actCtx.lpResourceName = MAKEINTRESOURCE(2);
actCtx.dwFlags = ACTCTX_FLAG_HMODULE_VALID | ACTCTX_FLAG_RESOURCE_NAME_VALID;

hActCtx = CreateActCtx(&actCtx);
if (hActCtx != INVALID_HANDLE_VALUE) {
ULONG_PTR cookie;
ActivateActCtx(hActCtx, &cookie);

// Do some UI stuff here; just show a message for example
MessageBox(NULL, TEXT("Styled message box"), NULL, MB_OK);

DeactivateActCtx(0, cookie);
ReleaseActCtx(hActCtx);
}

这里的hInst 是你的DLL 的模块句柄,你可以将它保存在DllMain 的全局变量中或者使用GetModuleHandle。函数来获取它。此示例暗示您的 DLL 在其 ID 为 2 的资源中存储 Common Controls 版本 6.0 list 。

您可以调用CreateActCtx仅在您的 DLL 初始化时执行一次,并且 ReleaseActCtx当不再需要它时。调用ActivateActCtx在创建任何窗口之前调用 DeactivateActCtx在将控制权返回给应用程序之前。

关于c++ - Win32。在 dll 中启用视觉样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25267272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com