0

こんにちは、
ResEdit を使用してモードレス ダイアログを作成し、Windows のデフォルトの「ペイント」アプリケーションにあるウィンドウの色選択ダイアログの機能を正確に模倣しました。
これは、C++ WINAPI の研究の一環として行っています。
(こちらをご覧ください: http://i233.photobucket.com/albums/ee74/Lightfooted/Public/colorDialog.jpg )

私が現在困惑している問題は、「WM_CTLCOLORSTATIC」の処理中に「PictureBox」コントロールの背景に色を付けられないように見えることです。理由はわかりませんが、WM_CTLCOLORSTATIC を処理しようとすると、「アクセスが拒否されました」というシステム エラー メッセージが表示されます。

私のコードは次のようになります。

DWORD   dwLastError;
TCHAR   lpBuffer[256];

switch(msg)
{

[...]

case WM_CTLCOLORSTATIC:

if(dwLastError != 0)    // Don't want to see a "operation done successfully" error ;-)
::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,                 // It´s a system error
                 NULL,                                      // No string to be formatted needed
                 dwLastError,                               // Hey Windows: Please explain this error!
                 MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),  // Do it in the standard language
                 lpBuffer,              // Put the message here
                 lpBuffer -1,                     // Number of bytes to store the message
                 NULL);
[...]
}

「WM_CTLCOLORSTATIC の場合」も何もなく、応答で「アクセスが拒否されました」というシステム エラーが表示されます。

何が原因なのかわかりません。

4

1 に答える 1

1

エラーは次のとおりです。

 lpBuffer -1,     

に変更しますsizeof(lpBuffer)/sizeof(TCHAR) - 1

于 2014-01-03T16:06:30.350 に答える