나는 다음 MFC 코드를 사용하여 대화 상자를 표시 할 수있는 DLL이이 작동DLL에서 만든 CDialog의 공용 컨트롤에 시각적 스타일을 설정하는 방법은 무엇입니까?
void ShowMyDialog()
{
BOOL bInitted = SUCCEEDED(::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE));
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
//InitCommonControls(); //Tried also with just this call
AfxEnableControlContainer();
HMODULE hDll = NULL;
if(GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
(LPCWSTR) ShowMyDialog,
&hDll) &&
hDll)
{
AfxSetResourceHandle(hDll);
CMyDialog dl; //Derived from CDialog
dl.DoModal();
}
if(bInitted)
::CoUninitialize();
}
,하지만 비주얼 스타일이없는 같은 대화 상자가 활성화 :
I을 DLL에 시각적 스타일을 사용하는 방법에 대해 this article을 찾았습니다. 그래서 제안 매니페스트 내용으로 리소스 파일 추가 :
을하고 (123)의 ID 자원 주었다
하지만 여전히 시가. 내가 여기서 무엇을 놓치고 있니?
리소스 ID 123은 "제어판에서 ComCtl32 버전 6을 사용하거나 RunDll32.exe로 실행되는 DLL"섹션에서 가져옵니다. 이 DLL이 제어판 페이지입니까? 그렇다면 123이 필요하고 다른 것이 잘못되었습니다. rundll32.dll에 의해 실행되는 DLL 인 경우 [정상적인 일반 프로그램으로 변환해야합니다] (https://blogs.msdn.microsoft.com/oldnewthing/20130104-00/?p=5643). 둘 중 어느 것도 맞지 않으면 잘못된 부분을보고있는 것입니다. 대신 "확장, 플러그인, MMC 스냅인 또는 프로세스로 가져온 DLL에 시각적 스타일 지원 추가"가 필요할 것입니다. – andlabs
예, 해당 섹션 이름이 좋지 않다고 동의합니다. – andlabs
@DavisHeffernan : 지적 해 주셔서 감사합니다. 와우. 누가 그 CreateActCtx API를 사용해야한다고 생각했을까요? – c00000fd