Pergunta

Alguns dos controles eu criei parecem padrão para o velho tema do Windows 95, como posso impedir isso? Aqui está um exemplo de um botão que não retenha aparência nativa do sistema operacional (estou usando o Vista como meu ambiente de desenvolvimento):

HWND button = CreateWindowEx(NULL, L"BUTTON", L"OK", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                  170, 340, 80, 25, hwnd, NULL, GetModuleHandle(NULL), NULL);

Eu estou usando C ++ nativo com o Windows API, código não gerenciado.

Foi útil?

Solução

Eu acredito que não tem nada a ver com o seu código, mas você precisa configurar uma adequada manifesto arquivo para obter os controles temáticos.

Algumas informações aqui: @ msdn.com e aqui: @ blogs.msdn.com

Você pode ver a diferença entre a aplicação com e sem manifesto aqui: heaventools.com

Outras dicas

Para adicionar um manifesto para o aplicativo que você precisa criar um arquivo MyApp.manifest e adicioná-lo ao arquivo de recurso do aplicativo:

//-- This define is normally part of the SDK but define it if this 
//-- is an older version of the SDK.
#ifndef RT_MANIFEST
#define RT_MANIFEST              24
#endif

//-- Add the MyApp XP Manifest file
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "MyApp.manifest"

Com as versões mais recentes do Visual Studio há um Manifest ferramenta guia encontrados nas configurações do projeto e do Arquivos Adicionais Manifest campo encontrado neste guia também pode ser usado para definir o arquivo de manifesto.

Aqui está um arquivo MyApp.manifest simples para uma aplicação Win32:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.1"
    processorArchitecture="X86"
    name="Microsoft.Windows.MyApp"
    type="win32"
/>
<description>MyApp</description>
</assembly>

Se você aplicação depende das outras DLLs esses detalhes também pode ser adicionado ao manifesto e Windows irá usar esta informação para se certificar que seu aplicativo usa sempre as versões corretas dessas DLLs dependentes.

Por exemplo, aqui estão as manifestas detalhes de dependência para o controle comum e versão bibliotecas de execução 8.0 C:

<dependentAssembly>
    <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="X86"
        publicKeyToken="6595b64144ccf1df"
        language="*"
    />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity
        type="win32"
        name="Microsoft.VC80.CRT"
        version="8.0.50608.0"
        processorArchitecture="x86"
        publicKeyToken="1fc8b3b9a1e18e3b" />
</dependentAssembly>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top