Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ WM_CTLCOLORSTATIC";“访问被拒绝”;,C++;WINAPI_C++_Winapi_System Error - Fatal编程技术网

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

C++ WM_CTLCOLORSTATIC";“访问被拒绝”;,C++;WINAPI,c++,winapi,system-error,C++,Winapi,System Error,你好, 我使用ResEdit创建了一个无模式对话框,以精确模拟默认Windows“Paint”应用程序中的窗口颜色选择对话框的功能。 我做这是我的C++ WiAPI研究的一部分。 (见下图:) 我目前遇到的问题是,在“WM_CTLCOLORSTATIC”处理过程中,我似乎无法为“PictureBox”控件的背景着色。我不知道为什么,但是,当我试图处理WM_CTLCOLORSTATIC时,我收到系统错误消息“访问被拒绝” 我的代码如下所示: DWORD dwLastError; TCHAR

你好,
我使用ResEdit创建了一个无模式对话框,以精确模拟默认Windows“Paint”应用程序中的窗口颜色选择对话框的功能。
我做这是我的C++ WiAPI研究的一部分。 (见下图:)

我目前遇到的问题是,在“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的情况下”,我得到了系统错误“访问被拒绝”的响应

我不知道这是什么原因。

以下是错误:

 lpBuffer -1,     

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

我们希望看到的不是FormatMessage的(坏)处理,而是您在
WM\u CTLCOLORSTATIC
中使用的实际代码错误检查代码看起来是假的,因此获得垃圾错误消息并不奇怪。GetLastError()仅在winapi函数返回失败状态后立即使用时才有效。通常为假返回或空指针。没有任何迹象表明您将此代码放在了正确的位置。GDI函数不设置最后一个错误。FormatMessage()调用也是错误的,第二个问题。顺便说一下,您应该将变量
lpBuffer
的名称更改为just
buffer
。Microsoft使用前缀
lp
表示指针类型的变量,但缓冲区是静态大小的数组,而不是指针。。。