数年前、私たちは CaptionX ( CaptionX Home Page )と呼ばれる ActiveX コンポーネントを開発しました。これにより、開発者はカスタムのクリック可能なグラフィック ボタンをウィンドウのタイトル バーに配置できます。Aero グラスがオンになっている場合、Vista と Windows 7 を除くすべての Windows で正常に動作します。カスタム アイコンを含むタイトル バーは、ウィンドウの境界線に透明効果を適用せずに、Windows の基本テーマを使用したかのように描画されます。
人々は最新バージョンの OS で CaptionX を使用したいと考えていますが、それを機能させることはできません。インターネットで検索すると、DWMWA_NCRENDERING_POLICY 属性を指定した DwmSetWindowAttribute API 呼び出しを使用してウィンドウ タイトルでカスタム描画を使用する場合、Aero Glass を有効にする必要があることがわかりますが、機能させるには至っていません。
ウィンドウの非クライアント サーフェスを描画するコードは次のようになります (申し訳ありませんが、古い VB6 です :):
Friend Function WindowProc(ByVal lPrevWndProc As Long, ByVal hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case iMsg
Case WM_NCPAINT
DoNCPaint lPrevWndProc, wParam
WindowProc = 0
Exit Function
Case WM_...
' Other message handlers
End Select
WindowProc = CallWindowProc(lPrevWndProc, hwnd, iMsg, wParam, lParam)
End Function
次の呼び出しを追加しました
DwmSetWindowAttribute m_hwnd, DWMWA_NCRENDERING_POLICY, DWMNCRP_ENABLED, 4
コードの多くの場所に適用されますが、効果はありません。DwmSetWindowAttribute を使用してウィンドウでデフォルトで使用されている場合、Aero Glass 効果を無効にすることはできますが、有効にすることはできません。
私たちは何を間違っていますか?コードにさらに API 呼び出しを追加する必要がありますか? その場合、どこに追加しますか?