scrollwnd.c

来自「这是一个MiniGUI的开发例子库 具有各种典型控件实现的源代码」· C语言 代码 · 共 150 行

C
150
字号
/*** $Id: scrollwnd.c,v 1.4 2004/07/29 07:17:08 snig Exp $**** scrollwnd.c: Sample program for MiniGUI Programming Guide**      Usage of SCROLLWND control.**** Copyright (C) 2004 Feynman Software.**** License: GPL*/#include <stdio.h>#include <stdlib.h>#include <minigui/common.h>#include <minigui/minigui.h>#include <minigui/gdi.h>#include <minigui/window.h>#include <minigui/control.h>#define IDC_SCROLLWND          100#define ID_ZOOMIN              200#define ID_ZOOMOUT             300static HWND hScrollWnd;static BITMAP bmp_bkgnd;static float current_scale = 1;static int pic_container_proc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam){    switch (message) {    case MSG_PAINT:    {        HDC hdc = BeginPaint (hWnd);        FillBoxWithBitmap (hdc, 0, 0, current_scale * bmp_bkgnd.bmWidth,                         current_scale * bmp_bkgnd.bmHeight, &bmp_bkgnd);        EndPaint (hWnd, hdc);        return 0;    }    }    return DefaultContainerProc (hWnd, message, wParam, lParam);}static intImageViewerProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam){    switch (message)    {    case MSG_INITDIALOG:    {        hScrollWnd = GetDlgItem (hDlg, IDC_SCROLLWND);        SendMessage (hScrollWnd, SVM_SETCONTAINERPROC, 0, (LPARAM)pic_container_proc);        SendMessage (hScrollWnd, SVM_SETCONTRANGE, bmp_bkgnd.bmWidth, bmp_bkgnd.bmHeight);        break;    }    case MSG_COMMAND:    {        int id = LOWORD(wParam);        if (id == ID_ZOOMIN || id == ID_ZOOMOUT) {            current_scale += (id == ID_ZOOMIN) ? 0.2 : -0.2;            if (current_scale < 0.1)                current_scale = 0.1;            SendMessage (hScrollWnd, SVM_SETCONTRANGE,                          current_scale * bmp_bkgnd.bmWidth,                          current_scale * bmp_bkgnd.bmHeight);            InvalidateRect (hScrollWnd, NULL, TRUE);        }        break;    }    case MSG_CLOSE:        EndDialog (hDlg, 0);        return 0;    }    return DefaultDialogProc (hDlg, message, wParam, lParam);}static CTRLDATA CtrlViewer[] ={    {        "scrollwnd",        WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL,         10, 10, 300, 200,        IDC_SCROLLWND,        "image viewer",        0    },    {        CTRL_BUTTON,        WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON,         20, 220, 60, 25,        ID_ZOOMIN,         "Zoom in",        0    },    {        CTRL_BUTTON,        WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON,         220, 220, 60, 25,        ID_ZOOMOUT,         "Zoom out",        0    }};static DLGTEMPLATE DlgViewer ={    WS_BORDER | WS_CAPTION,    WS_EX_NONE,    0, 0, 350, 280,    "Image Viewer",    0, 0,    TABLESIZE(CtrlViewer), CtrlViewer,    0};int MiniGUIMain (int argc, const char* argv[]){#ifdef _LITE_VERSION    SetDesktopRect(0, 0, 1024, 768);#endif        if (LoadBitmap (HDC_SCREEN, &bmp_bkgnd, "bkgnd.jpg"))         return 1;    DialogBoxIndirectParam (&DlgViewer, HWND_DESKTOP, ImageViewerProc, 0L);    UnloadBitmap (&bmp_bkgnd);    return 0;}#ifndef _LITE_VERSION#include <minigui/dti.c>#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?