WM_CTLCOLORSTATIC“访问被拒绝”,C ++ WINAPI

时间:2014-01-03 16:03:12

标签: c++ winapi system-error

嘿那里,
我使用ResEdit创建了一个无模式对话框,以模仿Window的“颜色选择”对话框的功能,该对话框存在于默认的Windows“Paint”应用程序中。 我这样做是我的C ++ WINAPI研究的一部分 (见http://i233.photobucket.com/albums/ee74/Lightfooted/Public/colorDialog.jpg

我目前难以理解的问题是,在“WM_CTLCOLORSTATIC”处理期间,我似乎无法为“PictureBox”控件的背景着色。我不知道为什么,但是,当我尝试处理WM_CTLCOLORSTATIC时,我收到系统错误消息“Access is Denied”。

我的代码如下:

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”,我收到系统错误“Access is Denied”作为回应。

我不知道造成这种情况的原因。

1 个答案:

答案 0 :(得分:1)

这是错误:

 lpBuffer -1,     

将其更改为sizeof(lpBuffer)/sizeof(TCHAR) - 1