Salve, ho realizzato un programma in C che utilizza le funzioni API e che dovrebbe mostrare un dialogo dove digitando su 4 possibili pushbotton con stile bitmap OBM_UPARROW, OBM_DNARROW, OBM_RGARROW, OBM_LFARROW, viene spostata una icona IDI_HAND verso l' alto, il basso, destra, sinistra. L' icona viene spostata, ma nel dialogo non mi compaiono le bitmap OBM. Sto utilizzando il compilatore Dev-C++, ma non so se questo compilatore contiene queste bitmap, forse è questo l' errore?
Il file.cpp del programma è il seguente:
#define STRICT
#define WIN32_LEAN_AND_MEAN
#define OEMRESOURSE
#include <windows.h>
#include "risorse1.h"
BOOL CALLBACK spostamento_static_desiderato(HWND hwnd_static, int dx, int dy)
{
WINDOWPLACEMENT wp;
ZeroMemory(&wp, sizeof(wp));
wp.length= sizeof(wp);
GetWindowPlacement(hwnd_static, &wp);
wp.rcNormalPosition.left= wp.rcNormalPosition.left +dx;
wp.rcNormalPosition.right= wp.rcNormalPosition.right +dx;
wp.rcNormalPosition.top= wp.rcNormalPosition.top +dy;
wp.rcNormalPosition.bottom= wp.rcNormalPosition.bottom +dy;
return SetWindowPlacement(hwnd_static, &wp);
}
BOOL CALLBACK sposta_static(HWND hwnddlg, UINT umsg, WPARAM wparam, LPARAM lparam)
{
HWND hwnd_static= GetDlgItem(hwnddlg, IDC_STATIC);
HICON hwnd_icona= LoadIcon(0, IDI_HAND);
// IDI_HAND indica l'identificatore della icona di errore, viene utilizzata questo tipo di icona perchè è ben visibile
// La funzione LoadIcon fornisce l'handle dell' icona desiderata, dato l'identificatore di tale icona
SendMessage(hwnd_static, STM_SETICON, (WPARAM)hwnd_icona, 0);
HWND hwnd_button1= GetDlgItem(hwnddlg, IDC_BUTTON1);
HANDLE hwnd_bitmap1= LoadBitmap(0, "OBM_LFARROW");
// OBM_LFARROW indica l'identificatore del bitmap freccia a sinistra
// La funzione LoadBitmap fornisce l'handle del bitmap desiderato, dato l'identificatore di tale bitmap
SendMessage(hwnd_button1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hwnd_bitmap1);
HWND hwnd_button2= GetDlgItem(hwnddlg, IDC_BUTTON2);
HBITMAP hwnd_bitmap2= LoadBitmap(0, "OBM_RGARROW");
// OBM_RGARROW indica l'identificatore del bitmap freccia a destra
SendMessage(hwnd_button2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hwnd_bitmap2);
HWND hwnd_button3= GetDlgItem(hwnddlg, IDC_BUTTON3);
HBITMAP hwnd_bitmap3= LoadBitmap(0, "OBM_UPARROW");
// OBM_UPARROW indica l'identificatore del bitmap freccia in alto
SendMessage(hwnd_button3, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hwnd_bitmap3);
HWND hwnd_button4= GetDlgItem(hwnddlg, IDC_BUTTON4);
HBITMAP hwnd_bitmap4= LoadBitmap(0, "OBM_DNARROW");
// OBM_DNARROW indica l'identificatore del bitmap freccia in basso
SendMessage(hwnd_button4, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hwnd_bitmap4);
if(umsg==WM_CLOSE)
{
EndDialog(hwnddlg,0);
return TRUE;
}
if(umsg==WM_COMMAND)
{
int spostamento=5;
int id_button=LOWORD(wparam);
HWND hwnd_static= GetDlgItem(hwnddlg, IDC_STATIC);
if(id_button==IDC_BUTTON1)
return spostamento_static_desiderato(hwnd_static, -spostamento, 0);
if(id_button==IDC_BUTTON2)
return spostamento_static_desiderato(hwnd_static, +spostamento, 0);
if(id_button==IDC_BUTTON3)
return spostamento_static_desiderato(hwnd_static, 0, -spostamento);
if(id_button==IDC_BUTTON4)
return spostamento_static_desiderato(hwnd_static, 0, +spostamento);
}
return FALSE;
}
int WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow)
{
DialogBoxParam(0,"IDD_DIALOG8",0,sposta_static,0);
return 0;
}
L' header file risorse1.h del programma è il seguente:
#define IDC_STATIC 101
#define IDC_BUTTON1 102
#define IDC_BUTTON2 103
#define IDC_BUTTON3 104
#define IDC_BUTTON4 105
Il resourse file IDD_DIALOG8.rc è il seguente:
#define OEMRESOURSE
#include <windows.h>
#include "risorse1.h"
IDD_DIALOG8 DIALOG DISCARDABLE 0,0,200,134
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialogo (finestra) per spostare una icona con bitmap"
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "", IDC_STATIC, "STATIC", SS_ICON, 40,58,60,15
CONTROL "", IDC_BUTTON1, "BUTTON", BS_PUSHBUTTON | BS_BITMAP | BS_NOTIFY, 100,30,40,15
CONTROL "", IDC_BUTTON2, "BUTTON", BS_PUSHBUTTON | BS_BITMAP | BS_NOTIFY, 150,30,40,15
CONTROL "", IDC_BUTTON3, "BUTTON", BS_PUSHBUTTON | BS_BITMAP | BS_NOTIFY, 125,10,40,15
CONTROL "", IDC_BUTTON4, "BUTTON", BS_PUSHBUTTON | BS_BITMAP | BS_NOTIFY, 125,50,40,15
END
Ringrazio per l' aiuto.
Matteo