スポンサーリンク

マニフェストを追加してwin32apiのUIにVisualStyleを適用する

パターン1 プログラム先頭に#pragma commentを設定する

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

https://learn.microsoft.com/ja-jp/windows/win32/controls/cookbook-overview

#include <windows.h>

// ビジュアルスタイル適用
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")


LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
  switch (msg) {
  case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
  }
  return DefWindowProc(hwnd, msg, wp, lp);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  PSTR lpCmdLine, int nCmdShow) {
  HWND hwnd;
  MSG msg;
  WNDCLASS winc;

  winc.style = CS_HREDRAW | CS_VREDRAW;
  winc.lpfnWndProc = WndProc;
  winc.cbClsExtra = winc.cbWndExtra = 0;
  winc.hInstance = hInstance;
  winc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  winc.hCursor = LoadCursor(NULL, IDC_ARROW);
  winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  winc.lpszMenuName = NULL;
  winc.lpszClassName = TEXT("SZLWND");

  if (!RegisterClass(&winc)) return -1;

  hwnd = CreateWindow(
    TEXT("SZLWND"), TEXT("manifest on"),
    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    CW_USEDEFAULT, CW_USEDEFAULT,
    300, 300,
    NULL, NULL, hInstance, NULL
  );

  CreateWindow(
    TEXT("BUTTON"), TEXT("button"),
    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
    0, 0, 100, 40,
    hwnd, NULL, hInstance, NULL
  );
  CreateWindow(
    TEXT("BUTTON"), TEXT("radio"),
    WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
    0, 50, 100, 30,
    hwnd, NULL, hInstance, NULL
  );

  CreateWindow(
    TEXT("EDIT"), TEXT("edit 111111111111111111"),
    WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT ,
    0, 100, 100, 30, 
    hwnd, NULL,hInstance, NULL
  );
  CreateWindow(
    TEXT("SCROLLBAR"), TEXT(""),
    WS_CHILD | WS_VISIBLE | SBS_HORZ,
    0, 150, 200, 20,
    hwnd, NULL,hInstance, NULL
  );

  if (hwnd == NULL) return -1;

  while (GetMessage(&msg, NULL, 0, 0)) DispatchMessage(&msg);
  return msg.wParam;
}

パターン2 マニフェストファイルをプロジェクトに追加

manifest.xml

<?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.0"
    processorArchitecture="*"
    name="CompanyName.ProductName.YourApplication"
    type="win32"
/>
<description>Your application description here.</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: