📄 picture.c
字号:
static void savefilename(FILEINFO *fileinfo, int filecount){ char *s, **temp; int i, len, count = 0, maxlen = 0; filemark = calloc(1, (filecount + 7) >> 3); temp = (char **)malloc(filecount * (NAME_MAX + 1) + sizeof(char *) * filecount); s = (char *)(temp + filecount); for (i = 0; i < filecount; i++) { temp[i] = s + i * (NAME_MAX + 1); if (!fileinfo[i].IsDir) { len = strlen(fileinfo[i].filename); memcpy(temp[count], fileinfo[i].filename, len); temp[count][len] = 0; if (len > maxlen) maxlen = len; count++; filemark[i >> 3] |= 0x80 >> (i % 8); } } if (count == 0) { free(temp); return; } filename = (char **)malloc(count * (maxlen + 1) + sizeof(char *) * count); s = (char *)(filename + count); for (i = 0; i < count; i++) { filename[i] = s + i * (maxlen + 1); strcpy(filename[i], temp[i]); } piccount = count; free(temp);}static int findmatchname(char *name){ int i; for (i = 0; i < piccount; i++) { if (!strcmp(filename[i], name)) return i; } return -1;}static void openpic(HWND hwnd, int flag){ HWND hscroll; int nSelIndex; FILEINFO *pfileinfo; ngDrawFlag = 0; hscroll = GetDlgItem(hwnd, IDC_PICTURE_SCROLLVIEW); nSelIndex = SendMessage (hscroll, SVM_GETCURSEL, 0, 0); if (nSelIndex < 0) return; pfileinfo = (FILEINFO *)SendMessage(hscroll, SVM_GETITEMADDDATA, nSelIndex, 0); if (!pfileinfo->IsDir) { int selpic; selpic = findmatchname(pfileinfo->filename); create_pictureshow_win(hwnd, filename, selpic, piccount); } ngDrawFlag = 1; InvalidateRect(hwnd, NULL, FALSE);}static void create_popmenu(HWND hWnd){ HMENU hNewMenu; MENUITEMINFO mii; memset(&mii, 0, sizeof(mii)); mii.type = MFT_STRING; mii.id =0;//#ifdef MGDEMO_ENGLISH// mii.typedata = (DWORD)"File Operate";//#else mii.typedata = (DWORD)"文件操作";//#endif SetWindowElementColorEx(HWND_DESKTOP, BKC_MENUITEM_NORMAL, RGB2Pixel(HDC_SCREEN, 222, 182, 61)); SetWindowElementColorEx(HWND_DESKTOP, FGC_MENUITEM_HILITE, RGB2Pixel(HDC_SCREEN, 250, 250, 250)); SetWindowElementColorEx(HWND_DESKTOP, BKC_MENUITEM_HILITE, RGB2Pixel(HDC_SCREEN, 0, 0, 255)); UpdateWindow(hWnd, TRUE); hNewMenu = CreatePopupMenu(&mii); mii.type = MFT_STRING; mii.state= 0; mii.id = IDC_PICTURE_MENU_SLIDER;//#ifdef MGDEMO_ENGLISH// mii.typedata = (DWORD)"Slide View";//#else mii.typedata = (DWORD)"滑动显示";//#endif InsertMenuItem(hNewMenu, 0, TRUE, &mii); mii.type = MFT_STRING; mii.state= 0; mii.id = IDC_PICTURE_MENU_INFO;//#ifdef MGDEMO_ENGLISH// mii.typedata = (DWORD)"Information";//#else mii.typedata = (DWORD)"信息";//#endif InsertMenuItem(hNewMenu, 1, TRUE, &mii); mii.type = MFT_STRING; mii.state= 0; mii.id = IDC_PICTURE_MENU_DELETE;//#ifdef MGDEMO_ENGLISH// mii.typedata = (DWORD)"Delete";//#else mii.typedata = (DWORD)"删除";//#endif InsertMenuItem(hNewMenu, 2, TRUE, &mii); mii.type = MFT_STRING; mii.state= 0; mii.id = IDC_PICTURE_MENU_RENAME;//#ifdef MGDEMO_ENGLISH// / mii.typedata = (DWORD)"rename";//#else mii.typedata = (DWORD)"重命名";//#endif InsertMenuItem(hNewMenu, 3, TRUE, &mii); mii.type = MFT_STRING; mii.state= 0; mii.id = IDC_PICTURE_MENU_MKDIR;//#ifdef MGDEMO_ENGLISH// mii.typedata = (DWORD)"Create Directory";//#else mii.typedata = (DWORD)"创建目录";//#endif InsertMenuItem(hNewMenu, 4, TRUE, &mii); hPicturePopMenu = StripPopupHead(hNewMenu);}static void picture_drawitem(HWND hwnd, HSVITEM hsvi, HDC hdc, RECT *rcDraw){ FILEINFO *fileinfo = (FILEINFO *)scrollview_get_item_adddata(hsvi); RECT tmp; tmp.left = rcDraw->left + 20; tmp.top = rcDraw->top; tmp.right = tmp.left + 180; tmp.bottom = rcDraw->bottom; SetBkMode(hdc, BM_TRANSPARENT); SetTextColor(hdc, PIXEL_black); if (scrollview_is_item_hilight(hwnd, hsvi)) { SetBrushColor (hdc, PIXEL_blue); FillBox (hdc, rcDraw->left+1, rcDraw->top+1, RECTWP(rcDraw)-2, RECTHP(rcDraw)-1); SetBkColor (hdc, PIXEL_blue); SetTextColor (hdc, PIXEL_lightwhite); } FillBoxWithBitmap(hdc, rcDraw->left, rcDraw->top, 0, 0, &picture_item_icons [fileinfo->IsDir]); DrawText(hdc, fileinfo->filename, -1, &tmp, DT_LEFT | DT_WORDBREAK);/* if (movieinfo->type == MUSIC_FILE) { tmp.left += 200; tmp.right = tmp.left + 180; DrawText(hdc, movieinfo->picturetime, -1, &tmp, DT_LEFT | DT_WORDBREAK); }*/ return;}static void picture_create_control(HWND hParent){ HWND hCtrlWnd; CreateWindowEx(CTRL_STATIC, NULL, WS_CHILD |WS_VISIBLE |SS_LEFT, WS_EX_TRANSPARENT, IDC_STATIC, 4, 24, 310, 20, hParent, 0); hCtrlWnd = CreateWindow("scrollview", NULL, WS_CHILD |WS_VISIBLE |WS_VSCROLL | SVS_AUTOSORT | SVS_NOTIFY, IDC_PICTURE_SCROLLVIEW, 0, 44, 220, 172, hParent, 0); SetWindowBkColor(hCtrlWnd, RGB2Pixel(HDC_SCREEN, 222, 251, 255)); SendMessage(hCtrlWnd, SVM_SETITEMDRAW, 0, (LPARAM)picture_drawitem); UpdateWindow(hCtrlWnd, TRUE); initfileinfo(vfilename, TABLESIZE(vfilename)); savefilename(vfileinfo, TABLESIZE(vfilename)); InsertToScrollView(hCtrlWnd, vfileinfo, TABLESIZE(vfilename)); SendMessage(hCtrlWnd, SVM_SETCURSEL, 0, 1); SetWindowText(GetDlgItem(hParent, IDC_STATIC), respath); create_popmenu(hParent); UpdateWindow(hParent, TRUE); ngDrawFlag = 1; InvalidateRect(hParent, NULL, FALSE);}static int pictureWinProc(HWND hWnd, int message, WPARAM wparam, LPARAM lparam){ switch (message) { case MSG_CREATE: load_picture_item_icons(TRUE); picture_create_control(hWnd); init_picture_controlbar(); create_picture_controlbar(hWnd); hPictureMain = hWnd; UpdateWindow(hWnd, TRUE); break; case MSG_ACTIVE: //SetActiveWindow(hWnd); break; case MSG_SIZECHANGING: { RECT* rcResult = (RECT*)lparam; rcResult->top = 0; rcResult->left = 0; rcResult->right = 320; rcResult->bottom = 240; return 0; } case MSG_LBUTTONDOWN: if (LOWORD(lparam) > 298 && HIWORD(lparam) < 24) SendMessage (hWnd, MSG_CLOSE, 0, 0); break; case MSG_CLOSE: destroy_picture_controlbar(); load_picture_item_icons(FALSE); free_fileinfo(); //DestroyAllControls(hWnd); DestroyMainWindow (hWnd); return 0; case MSG_PAINT: { HDC hDC; hDC = BeginPaint(hWnd); SetBrushColor(hDC, RGB2Pixel(HDC_SCREEN, 111, 193, 180)); FillBox(hDC, 0, 0, 320, 24); FillBox(hDC, 0, 216, 320, 24); SetBkMode(hDC, BM_TRANSPARENT); FillBoxWithBitmap(hDC, 2, 8, 0, 0, &picture_item_icons [0]);
//#ifdef MGDEMO_ENGLISH
// TextOut(hDC, 20, 5, "Picture View");
//#else
TextOut(hDC, 20, 5, "图片浏览");
//#endif draw_caption_bar(hDC, hWnd); filepreview(hDC, hWnd); EndPaint(hWnd, hDC); return 0; } case MSG_KEYDOWN: SetFocus(GetDlgItem(hWnd, IDC_PICTURE_SCROLLVIEW)); switch (wparam) { case SCANCODE_ENTER: case SCANCODE_KEYPADENTER: openpic(hWnd, 0); break; case SCANCODE_F1: openpic(hWnd, 1); break; case SCANCODE_F2: TrackPopupMenu(hPicturePopMenu, TPM_LEFTALIGN |TPM_LEFTBUTTON, 120, 120, hPictureMain); break; case SCANCODE_ESCAPE: printf ("sssssssssssssssssss\n"); SendMessage(hWnd, MSG_CLOSE, 0, 0); break; } break; case MSG_COMMAND: { int nId = LOWORD(wparam); int nNc = HIWORD(wparam); printf ("-------------MSG_COMMAND\n"); switch (nId) { case IDC_PICTURE_SCROLLVIEW: if (nNc == SVN_CLICKED) { ngDrawFlag = 0; openpic(hWnd, 0); } else if (nNc == SVN_SELCHANGED) { ngDrawFlag = 1; InvalidateRect(hWnd, NULL, FALSE); } break; case IDC_PICTURE_MENU_SLIDER: case IDC_PICTURE_MENU_DELETE: case IDC_PICTURE_MENU_RENAME: case IDC_PICTURE_MENU_MKDIR: case IDC_PICTURE_MENU_INFO: break; } break; } } return DefaultMainWinProc(hWnd, message, wparam, lparam);}void pictureMain(HWND hwnd){ //MSG Msg; HWND MainWnd = 0; MAINWINCREATE CreateInfo; CreateInfo.dwStyle = WS_VISIBLE; CreateInfo.dwExStyle = WS_EX_TOPMOST;//WS_EX_NONE;//#ifdef MGDEMO_ENGLISH// CreateInfo.spCaption = "Picture View";//#else CreateInfo.spCaption = "图片浏览";//#endif CreateInfo.hMenu = 0; CreateInfo.hCursor = GetSystemCursor(0); CreateInfo.hIcon = 0; CreateInfo.MainWindowProc = pictureWinProc; 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 = hwnd; MainWnd = CreateMainWindow(&CreateInfo); ShowWindow (MainWnd, SW_SHOWNORMAL);/* ShowWindow(MainWnd, SW_SHOWNORMAL); while(GetMessage(&Msg, MainWnd)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } MainWindowThreadCleanup(MainWnd);*/}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -