📄 demo_iconview.c
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <minigui/common.h>#include <minigui/minigui.h>#include <minigui/gdi.h>#include <minigui/window.h>#include <minigui/control.h>#include <minigui/mgext.h>#include <minigui/skin.h>#include "../global.h"#define SIID_ICONVIEW_SETUP 1#define SIID_ICONVIEW_OPTION 2#define SIID_ICONVIEW_BROWSER 3#define IDC_ICONVIEW 11 #define IDC_ICONVIEW_CONTROLBAR 12 #define COL_COUNT 5#define IDC_SKIN 100#define MUSIC_DIR 0#define MUSIC_PLAYLIST 1#define MUSIC_FILE 2#define MAX_FILE_HANDLES 1024/*note: width can't be larger than 304*/#define WIDTH_4x3 72#define HEIGHT_4x3 59 #define WIDTH_3x2 95 #define HEIGHT_3x2 87 #define WIDTH_FULL 240 #define HEIGHT_FULL 175 enum {MODE_4x3 = 0, MODE_3x2, MODE_FULL};enum {UNKOWN_TYPE = 0, DIR_TYPE, FILE_TYPE};static char *icon_filenames[] ={ "img_0000.jpg", "s_game.bmp", "img_0001.jpg", "s_file.bmp", "s_camera.bmp", "s_setup.bmp", "s_music.bmp", "s_video.bmp", "s_picture.bmp", "s_recorder.bmp", "s_help.bmp", "s_game1.bmp", "s_file1.bmp", "s_camera1.bmp", "s_setup1.bmp", "s_music1.bmp", "s_video1.bmp", "s_picture1.bmp", "s_recorder1.bmp", "s_help1.bmp", "b_game.bmp", "b_file.bmp", "b_camera.bmp", "b_setup.bmp", "b_music.bmp", "b_video.bmp", "b_picture.bmp", "b_recorder.bmp", "b_help.bmp"};static BITMAP *icon_bmps [TABLESIZE(icon_filenames)] = { bmp_img_0000, bmp_s_game, bmp_img_0001, bmp_s_file, bmp_s_camera, bmp_s_setup, bmp_s_music, bmp_s_video, bmp_s_picture, bmp_s_recorder, bmp_s_help, bmp_s_game1, bmp_s_file1, bmp_s_camera1, bmp_s_setup1, bmp_s_music1, bmp_s_video1, bmp_s_picture1, bmp_s_recorder1, bmp_s_help1, bmp_b_game, bmp_b_file, bmp_b_camera, bmp_b_setup, bmp_b_music, bmp_b_video, bmp_b_picture, bmp_b_recorder, bmp_b_help};static int icon_handles [TABLESIZE(icon_filenames)];static int iconview_mode_created = 0;static int current_display_mode;static HWND hIconView;/////////////////////////////////////static BITMAP controlbar_bmp [2];static int iconview_controlbar_event_cb (HWND hWnd, skin_item_t *item, int event, void *data);static int iconview_controlbar_msg_cb (HWND hWnd, int message, WPARAM wParam, LPARAM lParam, int *result);extern void draw_caption_bar (HDC, HWND);volatile static skin_item_t iconview_controlbar_items [] ={ {SIID_ICONVIEW_SETUP, SI_TYPE_CMDBUTTON | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE, 13, 2, {0}, 1, "setup"}, {SIID_ICONVIEW_OPTION, SI_TYPE_CMDBUTTON | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE, 116, 2, {0}, 1, "options"}, {SIID_ICONVIEW_BROWSER, SI_TYPE_CMDBUTTON | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE, 219, 2, {0}, 1, "browser"}};static skin_head_t _iconview_controlbar_skin;static skin_item_t _iconview_controlbar_items[TABLESIZE(iconview_controlbar_items)];volatile static skin_head_t iconview_controlbar_skin ={ "", SKIN_STYLE_NONE, &controlbar_bmp[0], NULL, 0, 3, _iconview_controlbar_items, FALSE};static const char *controlbar_res[] ={ "playbar_bg.bmp", "button_other.bmp"};#define CONTROLBAR_RES_NUM sizeof (controlbar_res) /sizeof (char *)static void init_bitmap_array (void){ controlbar_bmp [0] = *(bmp_playbar_bg); controlbar_bmp [1] = *(bmp_button_other);}static int load_skin_bmps(skin_head_t *skin, BOOL load, const char *bmpname[], int nCount){ return 0;}static int init_iconview_controlbar (void){ memcpy (&_iconview_controlbar_skin, (const void *)(&iconview_controlbar_skin), sizeof (iconview_controlbar_skin)); memcpy (&_iconview_controlbar_items, &iconview_controlbar_items, sizeof (iconview_controlbar_items)); load_skin_bmps (&_iconview_controlbar_skin, TRUE, controlbar_res , CONTROLBAR_RES_NUM); if (!skin_init (&_iconview_controlbar_skin, iconview_controlbar_event_cb, iconview_controlbar_msg_cb)){ printf("controlbar skin init fail !\n"); } return 0;}static void create_iconview_controlbar (HWND hWnd){ skin_head_t *pskin; HWND hControlBar; hControlBar = create_skin_control (&_iconview_controlbar_skin, hWnd, IDC_ICONVIEW_CONTROLBAR, 0, 216, 320, 24 ); printf ("------------hControlBar: %x\n", hControlBar); pskin = get_window_skin (hControlBar); skin_enable_item (pskin, SIID_ICONVIEW_SETUP, FALSE); //skin_enable_item (pskin, SIID_ICONVIEW_OPTION, FALSE); skin_enable_item (pskin, SIID_ICONVIEW_BROWSER, FALSE);}static void destroy_iconview_controlbar (void){ skin_deinit (&_iconview_controlbar_skin); load_skin_bmps (&_iconview_controlbar_skin, FALSE, controlbar_res, CONTROLBAR_RES_NUM);}int Change_Picture_Iconview (HWND hwnd, int mode);static int iconview_controlbar_event_cb (HWND hwnd, skin_item_t *item, int event, void *data){ static int displaymode = MODE_4x3; if (event == SIE_BUTTON_CLICKED){ switch (item->id){ case SIID_ICONVIEW_SETUP: fprintf (stderr, "----------setup clicked\n"); break; case SIID_ICONVIEW_OPTION: displaymode = (displaymode + 1) % 3; Change_Picture_Iconview (GetParent (hwnd), displaymode); break; case SIID_ICONVIEW_BROWSER: fprintf (stderr, "----------browser button clicked\n"); break; } } return 1;}static int iconview_controlbar_msg_cb (HWND hWnd, int message, WPARAM wParam, LPARAM lParam, int *result){ *result = MSG_CB_GOON; return 0;}////////////////////////////////////*static int load_iconview_res (){ int i = 0; for (; i < TABLESIZE (icon_filenames); i ++) { if (pdag_load_bitmap ((icon_bmps + i), fh_res_path, "picture/", icon_filenames [i]) < 0) { fprintf (stderr, "load %s\n", icon_filenames [i]); return -1; } } return 0;}void unload_iconview_res (){ int i = 0; for (; i <TABLESIZE (icon_filenames); i ++) { pdag_unload_bitmap ((icon_bmps + i)); }}static void Display_Iconview_Single_Item (void){ int *icon_item = NULL; int nSelItem = 0; IVITEMINFO item; nSelItem = SendMessage (hIconView, IVM_GETCURSEL, 0, 0); if (nSelItem < 0) return; if ((icon_item = (int *)SendMessage (hIconView, IVM_GETITEMADDDATA, nSelItem, 0)) == NULL) { return; } SendMessage (hIconView, IVM_RESETCONTENT, 0, 0); memset (&item, 0, sizeof (IVITEMINFO)); item.nItem = 0; item.bmp = icon_bmps [*icon_item]; item.label = icon_filenames [*icon_item]; SendMessage (hIconView, IVM_ADDITEM, 0, (LPARAM)&item); current_display_mode = MODE_FULL;}*/static void DisplayPictures (HWND hwnd){ int i; IVITEMINFO item; SendMessage (hIconView, IVM_RESETCONTENT, 0, 0); for (i = 0; i < TABLESIZE (icon_filenames); i ++) { memset (&item, 0, sizeof (IVITEMINFO)); item.nItem = i; item.bmp = icon_bmps [i]; item.label = icon_filenames [i]; item.addData = (DWORD) &(icon_handles [i]); SendMessage (hIconView, IVM_ADDITEM, 0, (LPARAM)&item); }}static void Display_Picture_4x3_Mode (HWND hwnd){ SendMessage (hIconView, IVM_SETITEMSIZE, WIDTH_4x3, HEIGHT_4x3); SendMessage (hIconView, IVM_SETSCROLLVAL, 0, HEIGHT_4x3 +5 );}static void Display_Picture_3x2_Mode (HWND hwnd){ SendMessage (hIconView, IVM_SETITEMSIZE, WIDTH_3x2, HEIGHT_3x2); SendMessage (hIconView, IVM_SETSCROLLVAL, 0, HEIGHT_3x2 + 5);}static void Display_Picture_Full_Mode (HWND hwnd){ SendMessage (hIconView, IVM_SETITEMSIZE, WIDTH_FULL, HEIGHT_FULL + 5); SendMessage (hIconView, IVM_SETSCROLLVAL, 0, HEIGHT_FULL + 5);}static void create_iconview_control (HWND hwnd){ int i = 0; hIconView = CreateWindow ( CTRL_ICONVIEW, "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL |IVS_NOTIFY, IDC_ICONVIEW, 0, 24, 320, 192, hwnd, 0); SetWindowBkColor (hIconView, RGB2Pixel (HDC_SCREEN, 249, 167, 4));/* CreateWindow("scrollview", NULL, WS_CHILD |WS_VISIBLE |WS_VSCROLL | SVS_AUTOSORT | SVS_NOTIFY, 1111, 0, 0, 220, 172, hwnd, 0);*//* CreateWindow ( CTRL_LISTVIEW, "", WS_CHILD | WS_VISIBLE | WS_BORDER |LVS_NOTIFY, 120, 0, 0, 320, 192, hwnd, 0);*/ for (; i < TABLESIZE(icon_filenames); i ++) icon_handles [i] = i; }static int repeat_creat_iconview (HWND hwnd){ if (!iconview_mode_created) {/* if (load_iconview_res () < 0) return -1;*/ create_iconview_control (hwnd); iconview_mode_created = 1; } return 0;} int Change_Picture_Iconview (HWND hwnd, int mode){ if( repeat_creat_iconview (hwnd) < 0) return -1; switch (mode) { case MODE_4x3: Display_Picture_4x3_Mode (hwnd); DisplayPictures (hwnd); current_display_mode = MODE_4x3; break; case MODE_3x2: Display_Picture_3x2_Mode (hwnd); DisplayPictures (hwnd); current_display_mode = MODE_3x2; break; case MODE_FULL: Display_Picture_Full_Mode (hwnd); //Display_Iconview_Single_Item (hwnd); DisplayPictures (hwnd); current_display_mode = MODE_FULL; break; } UpdateWindow (hIconView, TRUE); return 0;}static int iconviewWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam){ HDC hdc; switch (message) { case MSG_CREATE: init_bitmap_array (); init_iconview_controlbar (); create_iconview_controlbar (hWnd); Change_Picture_Iconview (hWnd, MODE_4x3); break; case MSG_KEYDOWN: switch (wParam) { case SCANCODE_ESCAPE: SendMessage (hWnd, MSG_CLOSE, 0, 0); break; } break; case MSG_LBUTTONDOWN: if (LOWORD(lParam) > 298 && HIWORD(lParam) < 24) SendMessage (hWnd, MSG_CLOSE, 0, 0); break; case MSG_COMMAND: { int id; int code; id = LOWORD(wParam); code = HIWORD(wParam); break; } case MSG_PAINT: hdc = BeginPaint (hWnd); SetBrushColor (hdc, RGB2Pixel (HDC_SCREEN, 111, 193, 180)); FillBox (hdc, 0, 0, 320, 24); SetBkMode (hdc, BM_TRANSPARENT);
//#ifdef MGDEMO_ENGLISH
// TextOut (hdc, 5, 4, "IconView Example");
//#else
TextOut (hdc, 5, 4, "IconView示例");
//#endif draw_caption_bar (hdc, hWnd); EndPaint (hWnd, hdc); break; case MSG_CLOSE: iconview_mode_created = 0; destroy_iconview_controlbar (); DestroyMainWindow (hWnd); return 0; } return DefaultMainWinProc(hWnd, message, wParam, lParam);}void create_iconview_win (HWND hParent){ HWND hwnd; MAINWINCREATE CreateInfo; CreateInfo.dwStyle = WS_VISIBLE;
//#ifdef MGDEMO_ENGLISH
// CreateInfo.spCaption = "IconView example";
//#else
CreateInfo.spCaption = "IconView示例";
//#endif CreateInfo.dwExStyle = WS_EX_TOPMOST; CreateInfo.hMenu = 0; CreateInfo.hCursor = GetSystemCursor(0); CreateInfo.hIcon = 0; CreateInfo.MainWindowProc = iconviewWinProc; CreateInfo.lx = 0; CreateInfo.ty = 0; CreateInfo.rx = 320; CreateInfo.by = 240; CreateInfo.iBkColor = RGB2Pixel (HDC_SCREEN, 197, 237, 246); CreateInfo.dwAddData = 0; CreateInfo.hHosting = hParent; hwnd = CreateMainWindow (&CreateInfo); if(hwnd == HWND_INVALID) { printf ("--------create_display_win failure\n"); return; } ShowWindow(hwnd, SW_SHOWNORMAL);/* while (GetMessage(&Msg, hwnd)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } MainWindowThreadCleanup (hwnd);*/ return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -