ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

对话框演示程序2.0

2020-12-19 17:03:41  阅读:190  来源: 互联网

标签:case 演示 对话框 hwnd iColor return 2.0 IDC define


#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WndProc     (HWND, UINT, WPARAM, LPARAM);
BOOL    CALLBACK AboutDlgProc(HWND, UINT, WPARAM, LPARAM);

int iCurrentColor  = IDC_BLACK,
    iCurrentFigure = IDC_RECT;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) 
{
    static TCHAR    szAppName[] = TEXT("About2");    
    HWND            hwnd; 
    MSG             msg; 
    WNDCLASS        wndclass;

    wndclass.style          = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc    = WndProc;
    wndclass.cbClsExtra     = 0;
    wndclass.cbWndExtra     = 0;
    wndclass.hInstance      = hInstance;
    wndclass.hIcon          = LoadIcon(hInstance, szAppName);
    wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName   = szAppName;
    wndclass.lpszClassName  = szAppName;

    if(!RegisterClass(&wndclass)) {
        MessageBox(NULL, TEXT("This program requires Windows NT !"), szAppName, MB_ICONERROR);
        return 0;
    }

    hwnd = CreateWindow(szAppName, TEXT("About Box Demo Program"),
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT, CW_USEDEFAULT,
                        CW_USEDEFAULT, CW_USEDEFAULT,
                        NULL, NULL, hInstance, NULL);

    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);

    while(GetMessage(&msg, NULL, 0, 0))
    { 
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
    return msg.wParam;
}

void PaintWindow(HWND hwnd, int iColor, int iFigure)
{
    static COLORREF crColor[8] = {  RGB(0,0,0),        RGB(0,0,255),
                                    RGB(0,255,0),    RGB(0,255,255),
                                    RGB(255,0,0),    RGB(255,0,255),
                                    RGB(255,255,0),    RGB(255,255,255)};
    HBRUSH hBrush;
    HDC    hdc;
    RECT   rect;
    hdc = GetDC(hwnd);
    GetClientRect(hwnd, &rect);
    hBrush=CreateSolidBrush(crColor[iColor-IDC_BLACK]);
    hBrush=(HBRUSH)SelectObject(hdc,hBrush);

    if(iFigure == IDC_RECT)
        Rectangle(hdc,rect.left, rect.top, rect.right, rect.bottom);
    else
        Ellipse(hdc, rect.left, rect.top, rect.right, rect.bottom);

    DeleteObject(SelectObject(hdc, hBrush));
    ReleaseDC(hwnd, hdc);
}

void PaintTheBlock(HWND hCtrl, int iColor, int iFigure)
{
    InvalidateRect(hCtrl, NULL, TRUE);
    UpdateWindow(hCtrl);
    PaintWindow(hCtrl, iColor, iFigure);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{
    static HINSTANCE hInstance;
    PAINTSTRUCT      ps;

    switch(message) 
    {
    case WM_CREATE:
        hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
        return 0;

    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case IDM_APP_ABOUT:
            if(DialogBox(hInstance, TEXT("AboutBox"), hwnd, AboutDlgProc))
                InvalidateRect(hwnd, NULL, TRUE);
            return 0;
        }
        break;

    case WM_PAINT:
        BeginPaint(hwnd, &ps);
        EndPaint(hwnd, &ps);

        PaintWindow(hwnd, iCurrentColor, iCurrentFigure);
        return 0;

    case WM_DESTROY: 
        PostQuitMessage(0);
        return 0;            
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}

BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND hCtrlBlock;
    static int  iColor, iFigure;

    switch(message)
    {
    case WM_INITDIALOG:
        iColor = iCurrentColor;
        iFigure = iCurrentFigure;
        CheckRadioButton(hDlg, IDC_BLACK, IDC_WHITE, iColor);
        CheckRadioButton(hDlg, IDC_RECT, IDC_ELLIPSE, iFigure);
        hCtrlBlock = GetDlgItem(hDlg, IDC_PAINT);
        SetFocus(GetDlgItem(hDlg, iColor));
        return FALSE;

    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case IDOK:
            iCurrentColor = iColor;
            iCurrentFigure = iFigure;
            EndDialog(hDlg,TRUE);
            return TRUE;

        case IDCANCEL:
            EndDialog(hDlg,FALSE);
            return TRUE;

        case IDC_BLACK:
        case IDC_RED:
        case IDC_GREEN:
        case IDC_YELLOW:
        case IDC_BLUE:
        case IDC_MAGENTA:
        case IDC_CYAN:
        case IDC_WHITE:
            iColor = LOWORD(wParam);
            CheckRadioButton(hDlg, IDC_BLACK, IDC_WHITE, LOWORD(wParam));
            PaintTheBlock(hCtrlBlock, iColor, iFigure);
            return TRUE;

        case IDC_RECT:
        case IDC_ELLIPSE:
            iFigure = LOWORD(wParam);
            CheckRadioButton(hDlg, IDC_RECT, IDC_ELLIPSE, LOWORD(wParam));
            PaintTheBlock(hCtrlBlock, iColor, iFigure);
            return TRUE;
        }
        break;

    case WM_PAINT:
        PaintTheBlock(hCtrlBlock, iColor, iFigure);
        break;
    }
    return FALSE;
}

about2.rc

//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

ABOUTBOX DIALOG DISCARDABLE  32, 32, 187, 172
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About Box Demo Program"
FONT 10, "System"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,25,151,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,115,151,50,14
    ICON            "About2",IDC_STATIC,7,7,20,20
    CTEXT           "About2",IDC_STATIC,70,15,47,12
    CTEXT           "About Box Demo Program",IDC_STATIC,50,27,86,18
    EDITTEXT        IDC_PAINT,114,52,40,41,ES_AUTOHSCROLL
    GROUPBOX        "&Color",IDC_STATIC,16,40,64,102
    RADIOBUTTON     "&Black",IDC_BLACK,30,50,34,10,WS_GROUP | WS_TABSTOP
    RADIOBUTTON     "B&lue",IDC_BLUE,30,62,31,10
    RADIOBUTTON     "&Green",IDC_GREEN,30,74,36,10
    RADIOBUTTON     "Cya&n",IDC_CYAN,30,85,33,10
    RADIOBUTTON     "&Red",IDC_RED,30,96,29,10
    RADIOBUTTON     "&Magenta",IDC_MAGENTA,30,106,44,10
    RADIOBUTTON     "&Yellow",IDC_YELLOW,30,118,38,10
    RADIOBUTTON     "&White",IDC_WHITE,30,130,35,10
    GROUPBOX        "&Figure",IDC_STATIC,108,105,61,36,WS_GROUP
    RADIOBUTTON     "Rec&tangle",IDC_RECT,117,116,49,10,WS_GROUP | WS_TABSTOP
    RADIOBUTTON     "&Ellipse",IDC_ELLIPSE,117,128,39,10
END
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
ABOUT2                  ICON    DISCARDABLE     "icon1.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

ABOUT2 MENU DISCARDABLE 
BEGIN
    POPUP "&Help"
    BEGIN
        MENUITEM "&About",                      IDM_APP_ABOUT
    END
END

resource.h

// Microsoft Developer Studio generated include file.
// Used by about2.rc
//
#define IDC_PAINT                       1000
#define IDC_BLACK                       1001
#define IDC_BLUE                        1002
#define IDC_GREEN                       1003
#define IDC_CYAN                        1004
#define IDC_RED                         1005
#define IDC_MAGENTA                     1006
#define IDC_YELLOW                      1007
#define IDC_WHITE                       1008
#define IDC_RECT                        1009
#define IDC_ELLIPSE                     1010
#define IDM_APP_ABOUT                   40001
#define IDC_STATIC                      -1

icon1.ico

标签:case,演示,对话框,hwnd,iColor,return,2.0,IDC,define
来源: https://www.cnblogs.com/lhb666aboluo/p/14159942.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有