WIN32: PictureBox не отображает изображение - PullRequest
0 голосов
/ 13 марта 2020

Я использую программирование WIN32 и C для создания диалогового окна в Visual Studio 2008 в ОС Windows CE с использованием Windows 5.0 Mobile SDK. Я вставляю свои два графических блока с помощью редактора диалога ресурсов и гарантирую, что им назначены идентификаторы в окне ресурса. Я использую SHLoadDIBitmap для отображения изображения. Мой код компилируется без ошибок, но когда я запускаю программу, изображения не появляются в двух графических полях. Что я делаю не так?

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <windowsx.h>
#include <winuser.h>
#include "ScanCAPI.h"
#include "resource.h"

#pragma comment(lib, "Kernel32.lib")

HBITMAP hImage;
HBITMAP hImage1;

.
.
.

    switch(uMsg)
    {

        case WM_INITDIALOG:

            hImage = SHLoadDIBitmap(TEXT("\\My Documents\\image1.bmp"));
            hImage1 = SHLoadDIBitmap(TEXT("\\My Documents\\image2.bmp"));
            if (hImage==NULL) {
               MessageBox(0,"hImage returned null",0,0);
            } else {
            hnd_pic1 = GetDlgItem(hwnd,IDC_STATIC8);
            SendMessage(hnd_pic1, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hImage);
            }


            hnd_pic2 = GetDlgItem(hwnd,IDC_STATIC9);
             if (hImage1==NULL) {
              MessageBox(0,"hImage1 returned null",0,0);
            } else {
            SendMessage(hnd_pic2, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hImage1);
}


1 Ответ

1 голос
/ 18 марта 2020

Следующий пример кода работает для меня на Windows 10 (SHLoadDIBitmap API кажется недопустимым для Windows 10. Вместо этого я использую LoadImage API.). Вы можете обратиться к.

коду C ++ в процедуре диалогового окна:

case WM_INITDIALOG:
    hImage = LoadImage(NULL, L"full_path_to\\image3.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
    if (NULL == hImage)
        errCode = GetLastError();

    hwd_static_img = GetDlgItem(hDlg, IDC_STATIC6);
    SendMessage(hwd_static_img, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hImage);
    return (INT_PTR)TRUE;

Сценарий ресурса в файле project_name.r c:

CONTROL         "",IDC_STATIC6,"Static", SS_BITMAP,37,133,136,109

Два примечания:

  1. Убедитесь, что файл изображения является допустимым растровым файлом . Например, вы можете нарисовать картинку и сохранить ее как растровое изображение, используя mspaint.exe. Если вы переименуете файл с .PNG на .BMP, LoadImage вернет дескриптор NULL, но GetLastError вернет 0, что означает отсутствие ошибок.
  2. Убедитесь, что установлено SS_BITMAP stati c стиль управления для управления изображением (IDC_STATIC6).

Кстати, нет необходимости помещать файл изображения в один каталог с вашим проектом или EXE. Укажите правильный полный путь к файлу изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...