Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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
SendMessageW返回“返回”;无效的窗口句柄“; 我试图在C++中在窗口上显示一个图像,我的sEndoMasGew返回“无效窗口句柄”。 My SendMessageW函数: void ImageWindows() { messageResult = SendMessageW(hImageWindow, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hFirstPic); //sending image to window //Error check if (messageResult == NULL) { DWORD error = GetLastError(); LPTSTR output = NULL; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&output, 0, NULL); MessageBox(NULL, output, L"Error. Reason:", MB_OK); } else { MessageBox(NULL, L"Image was assigned correctly!", L"Success", MB_OK); } //Error check }_C++_Winapi - Fatal编程技术网

SendMessageW返回“返回”;无效的窗口句柄“; 我试图在C++中在窗口上显示一个图像,我的sEndoMasGew返回“无效窗口句柄”。 My SendMessageW函数: void ImageWindows() { messageResult = SendMessageW(hImageWindow, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hFirstPic); //sending image to window //Error check if (messageResult == NULL) { DWORD error = GetLastError(); LPTSTR output = NULL; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&output, 0, NULL); MessageBox(NULL, output, L"Error. Reason:", MB_OK); } else { MessageBox(NULL, L"Image was assigned correctly!", L"Success", MB_OK); } //Error check }

SendMessageW返回“返回”;无效的窗口句柄“; 我试图在C++中在窗口上显示一个图像,我的sEndoMasGew返回“无效窗口句柄”。 My SendMessageW函数: void ImageWindows() { messageResult = SendMessageW(hImageWindow, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hFirstPic); //sending image to window //Error check if (messageResult == NULL) { DWORD error = GetLastError(); LPTSTR output = NULL; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&output, 0, NULL); MessageBox(NULL, output, L"Error. Reason:", MB_OK); } else { MessageBox(NULL, L"Image was assigned correctly!", L"Success", MB_OK); } //Error check },c++,winapi,C++,Winapi,我的hImageWindow: hImageWindow = CreateWindowW(wc.lpszClassName, NULL, WS_VISIBLE | SS_BITMAP, 100, 100, 517, 450, NULL, NULL, NULL, NULL); //Creating main window 我在WM_CREATE调用ImageWindows()函数,但在此之前我设置了hFirstPic的值。在执行此操作时,我还进行了错误检查,它不会返回任何错误。我得到的是一扇空白

我的hImageWindow:

hImageWindow = CreateWindowW(wc.lpszClassName, NULL, WS_VISIBLE | SS_BITMAP, 100, 100, 517, 450, NULL, NULL, NULL, NULL); //Creating main window
我在WM_CREATE调用ImageWindows()函数,但在此之前我设置了hFirstPic的值。在执行此操作时,我还进行了错误检查,它不会返回任何错误。我得到的是一扇空白的白色窗户。我也没有找到任何关于这个话题的答案,只有10年前的一个,但这个修正在我的案例中不起作用

如果需要,下面是我的窗口类:

//MAIN WINDOW CLASS
WNDCLASSW wc = {}; //Creating window class
wc.hInstance = hInstance; //Instance of class
wc.lpszClassName = L"mainClass"; //Name of class
wc.lpfnWndProc = wc_callback; //Assigning callback function to class
感谢您的帮助,谢谢您的帮助

根据:

返回值

返回值是以前与关联的图像的句柄 静态控件(如有);否则,它是空的

因此
messageResult
并不意味着失败。错误
无效窗口句柄的原因是
hImageWindow
WM\u CREATE
时为空,因此此时不能使用
SendMessageW

您需要创建一个静态控件,并在创建窗口后调用
ImageWindows
函数。以下是一个示例:

#include <Windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HWND hImageWindow;
void ImageWindows() {
    HBITMAP hFirstPic = (HBITMAP)LoadImage(NULL, L"test.bmp", (WPARAM)IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    LRESULT messageResult = SendMessageW(hImageWindow, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hFirstPic); //sending image to window
    //Error check
    DWORD error = GetLastError();
    if (error != 0) {
        LPTSTR output = NULL;
        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&output, 0, NULL);
        MessageBox(NULL, output, L"Error. Reason:", MB_OK);
    }
    else {
        MessageBox(NULL, L"Image was assigned correctly!", L"Success", MB_OK);
    }
    //Error check
}
int WINAPI WinMain(_In_  HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_  LPSTR szCmdLine, _In_  int iCmdShow)
{
    static TCHAR szAppName[] = TEXT("hello windows");
    MSG msg;
    WNDCLASS wndclass;
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;
    if (!RegisterClass(&wndclass))
    {
        MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR);
    }

    HWND hwnd = CreateWindow(szAppName,
        TEXT("the hello program"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInstance,
        NULL);
    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);

    hImageWindow = CreateWindow(L"STATIC", L"background", SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 300, 300, hwnd, NULL, NULL, NULL);
    ImageWindows();

    while (GetMessageW(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessageW(&msg);
    }
    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}
#包括
LRESULT回调WndProc(HWND、UINT、WPARAM、LPARAM);
HWND hImageWindow;
void ImageWindows(){
HBITMAP hFirstPic=(HBITMAP)LoadImage(NULL,L“test.bmp”,(WPARAM)IMAGE_位图,0,0,LR_LOADFROMFILE);
LRESULT messageResult=SendMessageW(hImageWindow,STM_SETIMAGE,IMAGE_BITMAP,(LPRAM)hFirstPic);//将图像发送到窗口
//错误检查
DWORD error=GetLastError();
如果(错误!=0){
LPTSTR输出=NULL;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_insert,NULL,error,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)和输出,0,NULL);
MessageBox(NULL,输出,L“错误。原因:”,MB_OK);
}
否则{
MessageBox(空,L“图像分配正确!”,L“成功”,MB_OK);
}
//错误检查
}
int WINAPI WinMain(_In_uuhinstance HINSTANCE,_In_uopt_uuuhinstance hPrevInstance,_In_uustrszcmdline,u In_uuint iCmdShow)
{
静态TCHAR szAppName[]=文本(“你好窗口”);
味精;
WNDCLASS WNDCLASS;
wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(空,IDI_应用程序);
wndclass.hCursor=LoadCursor(空,IDC_箭头);
wndclass.hbrBackground=(HBRUSH)GetStockObject(白色画笔);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,文本(“此程序需要Windows NT!”),szAppName,MB_ICONERROR);
}
HWND HWND=CreateWindow(szAppName,
文本(“hello程序”),
WS_重叠窗口,
CW_使用默认值,
CW_使用默认值,
CW_使用默认值,
CW_使用默认值,
无效的
无效的
hInstance,
无效);
显示窗口(hwnd、iCmdShow);
更新窗口(hwnd);
hImageWindow=CreateWindow(L“静态”,L“背景”,SS|U位图| WS|U子对象| WS|U可见,0,0,300,300,hwnd,NULL,NULL);
ImageWindows();
while(GetMessageW(&msg,NULL,0,0))
{
翻译信息(&msg);
DispatchMessageW(&msg);
}
返回msg.wParam;
}
LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM)
{
开关(信息)
{
案例WM_销毁:
PostQuitMessage(0);
返回0;
}
返回DefWindowProc(hwnd、message、wParam、lParam);
}

messageResult==NULL
在案例
STM\u SETIMAGE
中不表示错误。这只意味着以前没有与静态控件关联的图像您是否检查过
hImageWindow
是否不为空?@RolandasUlevicius是的,我检查过,它不为空。@Rolandas认为您遗漏了什么。阅读文档和RbMm的评论。