亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? simgui.cpp

?? window下的多線程編程參考書。值得一讀
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//
// FILE: SimGUI.cpp
//
// Copyright (c) 1997 by Aaron Michael Cohen and Mike Woodring
//
/////////////////////////////////////////////////////////////////////////
#include "SimGUI.h"
#include "resource.h"
#include <math.h>

// declare the single global application instance...
CDiningSim g_theApp;

// CDiningSim member functions...
BOOL CDiningSim::InitInstance(void) {
    m_pMainWnd = new CDiningSimWindow();
    m_pMainWnd->ShowWindow(m_nCmdShow);
    m_pMainWnd->UpdateWindow();
    return TRUE;
}

// CDiningSimWindow MFC message map...
BEGIN_MESSAGE_MAP(CDiningSimWindow, CFrameWnd)
    ON_WM_PAINT()
    ON_WM_ERASEBKGND()
    ON_WM_SIZE()
    ON_WM_VSCROLL()
    ON_WM_HSCROLL()
    ON_WM_GETMINMAXINFO()
    ON_WM_DESTROY()
    ON_COMMAND( ID_FILE_RUN, OnRun)
    ON_COMMAND( ID_FILE_STOP, OnStop)
    ON_COMMAND( ID_FILE_EXIT, OnExit)
    ON_UPDATE_COMMAND_UI( ID_FILE_RUN, OnUpdateRunUI)
    ON_UPDATE_COMMAND_UI( ID_FILE_STOP, OnUpdateStopUI)
    ON_MESSAGE( WM_DININGSIM_PHILOSOPHER_UPDATE, OnDiningSimPhilosopherUpdate)
    ON_MESSAGE( WM_DININGSIM_FORK_UPDATE, OnDiningSimForkUpdate)
END_MESSAGE_MAP()

// CDiningSimWindow constuctor...
CDiningSimWindow::CDiningSimWindow() {
    // not initially running...
    m_bRunning = FALSE;

    // no previous user message text rect...
    m_crLastTextRect = CRect(0,0,0,0);

    // no initial scroll...
    m_nHScrollPos = 0;
    m_nVScrollPos = 0;
    m_nHScrollPosMax = 0;
    m_nVScrollPosMax = 0;

    // default max window size is a big as the screen...
    CRect dr;
    GetDesktopWindow()->GetClientRect(dr);
    m_ptMaxWindowSize.x = dr.Width();
    m_ptMaxWindowSize.y = dr.Height();

    // table side will be 3/5 of the window width...
    m_nTableSide = 3*WINDOW_WIDTH/5;

    // initialize the philosopher and fork states...
    for (int i = 0; i < NUMBER_PHILOSOPHERS; i++) {
        m_nForkState[i] = FORK_STATE_AVAILABLE;
        m_nPhilosopherState[i] = PHILOSOPHER_STATE_THINKING;
    }

    // load the image of the spaghetti bowl...
    HBITMAP hBitmap;
    hBitmap = (HBITMAP) ::LoadImage( AfxGetApp()->m_hInstance, "bowl.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    if (hBitmap)
        m_cbmBowl.Attach(hBitmap);
    else
        ErrorExit("Unable to load image file 'bowl.bmp'!");

    // load the images of the philosophers...
    hBitmap = (HBITMAP) ::LoadImage( AfxGetApp()->m_hInstance, "philosophers.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    if (hBitmap)
        m_cbmPhilosophers.Attach(hBitmap);
    else 
        ErrorExit("Unable to load image file 'philosophers.bmp'!");

    // load the images of the forks...
    hBitmap = (HBITMAP) ::LoadImage( AfxGetApp()->m_hInstance, "forks.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    if (hBitmap)
        m_cbmForks.Attach(hBitmap);
    else 
        ErrorExit("Unable to load image file 'forks.bmp'!");

    // create the main window...
    Create( NULL, "Dining Philosophers Simulation", WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL, rectDefault, NULL, MAKEINTRESOURCE(IDR_FILEMENU));

    // compute maximum size, resize, and center the main window...
    CRect wr, cr;
    GetClientRect(cr);
    GetWindowRect(wr);
    m_ptMaxWindowSize.x = WINDOW_WIDTH + wr.Width() - cr.Width();
    m_ptMaxWindowSize.y = WINDOW_HEIGHT + wr.Height() - cr.Height();
    int x = (m_ptMaxWindowSize.x > dr.Width()) ? dr.Width() : m_ptMaxWindowSize.x;
    int y = (m_ptMaxWindowSize.y > dr.Height()) ? dr.Height() : m_ptMaxWindowSize.y;
    SetWindowPos( NULL, 0, 0, x, y, SWP_NOMOVE | SWP_NOZORDER);
    CenterWindow();

    // set the simualation UI window...
    m_cSimulation.SetHwnd(m_hWnd);

    // show that we're ready...
    ShowUserMessage("Ready.");
}

// CDiningSimWindow standard message handler functions...
afx_msg void CDiningSimWindow::OnPaint() {
    // redraw the entire simulation...
    CPaintDC dc(this);

    // align the DC origin with the scroll position...
    dc.SetWindowOrg( m_nHScrollPos, m_nVScrollPos);

    // update the display...
    DrawSimulation(&dc);
}

afx_msg BOOL CDiningSimWindow::OnEraseBkgnd(CDC *pDC) {
    // fill the window with black...
    CRect cr;
    CBrush cb;
    GetClientRect(cr);
    cb.CreateStockObject(BLACK_BRUSH);
    pDC->FillRect( cr, &cb);
    return TRUE;
}

afx_msg void CDiningSimWindow::OnSize( UINT nType, int cx, int cy) {
    // adjust the horizontal scroll bar for the new window size...
    if (cx >= WINDOW_WIDTH) {
        // hide the scrollbar...
        SetScrollRange( SB_HORZ, 0, 0, TRUE);
        m_nHScrollPos = 0;
        m_nHScrollPosMax = 0;
    }
    else {
        // set the new scroll range...
        m_nHScrollPosMax = WINDOW_WIDTH - cx;
        SetScrollRange( SB_HORZ, 0, m_nHScrollPosMax, TRUE);

        // make the the current setting is not beyond the 
        // new upper bound...
        if (m_nHScrollPos > m_nHScrollPosMax) { 
            m_nHScrollPos = m_nHScrollPosMax;
            SetScrollPos( SB_HORZ, m_nHScrollPos, TRUE);
        }
    }

    // adjust the vertical scroll bar for the new window size...
    if (cy >= WINDOW_HEIGHT) {
        // hide the scrollbar...
        SetScrollRange( SB_VERT, 0, 0, TRUE);
        m_nVScrollPos = 0;
        m_nVScrollPosMax = 0;
    }
    else {
        // set the new scroll range...
        m_nVScrollPosMax = WINDOW_HEIGHT - cy;
        SetScrollRange( SB_VERT, 0, m_nVScrollPosMax, TRUE);

        // make the the current setting is not beyond the 
        // new upper bound...
        if (m_nVScrollPos > m_nVScrollPosMax) { 
            m_nVScrollPos = m_nVScrollPosMax;
            SetScrollPos( SB_VERT, m_nVScrollPos, TRUE);
        }
    }
}

afx_msg void CDiningSimWindow::OnVScroll( UINT nCode, UINT nPos, CScrollBar *pScrollBar) {
    // use this to store how far to move the window...
    int nDelta = 0;

    // simple scrolling...
    // a page equals a line equals one row of pixels...
    // dragging the thumb allows faster scrolling...
    switch (nCode) {
        case SB_PAGEUP:
        case SB_LINEUP:
            if (m_nVScrollPos <= 0)
                return;
            else
                nDelta = -1;
            break;
        case SB_PAGEDOWN:
        case SB_LINEDOWN:
            if (m_nVScrollPos >= m_nVScrollPosMax)
                return;
            else
                nDelta = 1;
            break;
        case SB_THUMBPOSITION:
            nDelta = (int) nPos - m_nVScrollPos;
            break;
    }

    // save the new scroll position...
    m_nVScrollPos += nDelta;

    // set the scroll bar to reflect the new position...
    SetScrollPos( SB_VERT, m_nVScrollPos, TRUE);

    // scroll the window and redraw the uncovered area...
    ScrollWindow( 0, -nDelta);
}

afx_msg void CDiningSimWindow::OnHScroll( UINT nCode, UINT nPos, CScrollBar *pScrollBar) {
    // use this to store how far to move the window...
    int nDelta = 0;

    // simple scrolling...
    // a page equals a line equals one column of pixels...
    // dragging the thumb allows faster scrolling...
    switch (nCode) {
        case SB_PAGEUP:
        case SB_LINEUP:
            if (m_nHScrollPos <= 0)
                return;
            else
                nDelta = -1;
            break;
        case SB_PAGEDOWN:
        case SB_LINEDOWN:
            if (m_nHScrollPos >= m_nHScrollPosMax)
                return;
            else
                nDelta = 1;
            break;
        case SB_THUMBPOSITION:
            nDelta = (int) nPos - m_nHScrollPos;
            break;
    }

    // save the new scroll position...
    m_nHScrollPos += nDelta;

    // set the scroll bar to reflect the new position...
    SetScrollPos( SB_HORZ, m_nHScrollPos, TRUE);

    // scroll the window and redraw the uncovered area...
    ScrollWindow( -nDelta, 0);
}

afx_msg void CDiningSimWindow::OnGetMinMaxInfo( MINMAXINFO FAR* lpMMI) {
    // tell Windows the application maximum window size...
    lpMMI->ptMaxSize = lpMMI->ptMaxTrackSize = m_ptMaxWindowSize;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电影免费观看高清完整版 | 国产精品美女久久久久久| 在线91免费看| 69p69国产精品| 91精品国模一区二区三区| 欧美卡1卡2卡| 91麻豆精品国产无毒不卡在线观看| 欧美中文字幕不卡| 欧美日韩国产高清一区二区| 欧美日韩国产综合视频在线观看| 欧美视频在线不卡| 欧美二区三区91| 欧美一级二级三级蜜桃| 日韩欧美亚洲国产精品字幕久久久| 欧美成人一区二区| 久久伊人蜜桃av一区二区| 日本一区二区视频在线| 亚洲日本在线天堂| 亚洲综合清纯丝袜自拍| 天堂蜜桃一区二区三区 | 色天天综合久久久久综合片| 色综合久久九月婷婷色综合| 欧美亚洲另类激情小说| 欧美精品xxxxbbbb| 337p粉嫩大胆色噜噜噜噜亚洲| 国产婷婷色一区二区三区四区| 国产精品久久久久影院| 樱桃国产成人精品视频| 日本成人在线视频网站| 国产乱国产乱300精品| 高清不卡在线观看av| 色婷婷av一区二区三区大白胸| 欧美高清你懂得| 久久午夜羞羞影院免费观看| 国产精品久久久久久久第一福利| 亚洲免费观看高清完整版在线观看 | 毛片av一区二区| 国产一区999| 91日韩在线专区| 69精品人人人人| 国产精品污网站| 亚洲国产aⅴ成人精品无吗| 美女看a上一区| 99这里只有精品| 欧美一区二区三区系列电影| 国产欧美一区视频| 亚洲国产色一区| 国产精品一区二区91| 一本色道久久综合精品竹菊| 91精品国产入口在线| 国产精品人妖ts系列视频| 亚洲图片欧美视频| 国产成人av福利| 欧美午夜一区二区三区免费大片| 久久免费午夜影院| 日韩综合一区二区| 99视频在线观看一区三区| 日韩欧美国产系列| 一区二区三区国产| 国产suv一区二区三区88区| 欧美日韩中文一区| 中文字幕一区二区三区不卡| 蜜臀av性久久久久av蜜臀妖精| 色偷偷一区二区三区| 久久久亚洲午夜电影| 亚洲午夜激情网页| 不卡在线观看av| 精品久久久久久久久久久久久久久久久| 亚洲欧美激情在线| 国产激情一区二区三区| 91精品国产全国免费观看| 亚洲三级免费电影| 国产成人8x视频一区二区| 欧美刺激午夜性久久久久久久| 亚洲一区二区三区爽爽爽爽爽| 波多野结衣一区二区三区| 精品国产免费久久| 免费观看30秒视频久久| 欧美日韩综合在线免费观看| 亚洲美女屁股眼交3| 成人免费视频免费观看| 26uuu国产电影一区二区| 午夜视频在线观看一区| 色综合色狠狠综合色| 日本一区二区成人| 国产精品一区二区不卡| 日韩精品一区二区三区视频在线观看| 亚洲v中文字幕| 欧美三级乱人伦电影| 艳妇臀荡乳欲伦亚洲一区| 99re视频精品| 136国产福利精品导航| 成人午夜免费视频| 日本一区二区高清| 成人三级在线视频| 国产精品麻豆久久久| 成人免费视频国产在线观看| 国产女人水真多18毛片18精品视频| 激情六月婷婷久久| wwwwww.欧美系列| 国产一区二区三区日韩| 精品国产乱码久久久久久久| 久久99精品国产麻豆不卡| 欧美大片日本大片免费观看| 美女在线一区二区| 精品三级在线观看| 国内精品自线一区二区三区视频| 精品久久久久久最新网址| 国产一本一道久久香蕉| 国产亚洲人成网站| 成人国产亚洲欧美成人综合网| 欧美国产精品久久| 99久久久久免费精品国产| 自拍偷拍欧美激情| 在线观看成人小视频| 亚洲第一激情av| 日韩欧美第一区| 国产传媒一区在线| 国产精品成人一区二区三区夜夜夜 | 国产91丝袜在线18| 国产精品久久久久久久岛一牛影视| 成熟亚洲日本毛茸茸凸凹| 国产精品国产三级国产三级人妇| 91亚洲国产成人精品一区二三| 亚洲色图都市小说| 欧美福利视频一区| 精东粉嫩av免费一区二区三区| 欧美成人video| 成人在线视频一区二区| 亚洲视频一区二区在线| 欧美性生活影院| 另类小说欧美激情| 国产清纯在线一区二区www| 色综合久久久久综合体| 日韩高清在线不卡| 国产欧美一区二区精品婷婷| 99久久精品情趣| 调教+趴+乳夹+国产+精品| xnxx国产精品| 日本黄色一区二区| 麻豆精品在线视频| 国产精品国产三级国产普通话三级 | 国产自产视频一区二区三区| 亚洲视频综合在线| 日韩美女主播在线视频一区二区三区| 国产激情视频一区二区在线观看| 亚洲欧美日韩电影| 精品国产髙清在线看国产毛片| 成人国产电影网| 日韩电影免费一区| 国产精品免费久久| 制服视频三区第一页精品| 国产成人午夜片在线观看高清观看| 一区二区三区在线播| 精品嫩草影院久久| 91黄色免费看| 国产在线精品一区二区夜色| 亚洲免费观看高清完整版在线观看熊 | 五月天亚洲婷婷| 国产精品美女久久久久aⅴ国产馆| 欧美日韩一区二区三区免费看 | 久久久久久久久久久黄色| 在线看日本不卡| 国产在线精品视频| 丝袜诱惑制服诱惑色一区在线观看 | 国产精品亚洲一区二区三区妖精| 亚洲一区二区视频| 国产精品欧美精品| 精品盗摄一区二区三区| 欧美在线观看视频一区二区三区| 国产麻豆9l精品三级站| 天堂av在线一区| 夜色激情一区二区| 国产精品国产三级国产| 亚洲精品一线二线三线无人区| 欧美偷拍一区二区| av日韩在线网站| 国产精品1区2区3区| 日韩和欧美一区二区三区| 一区二区三区四区国产精品| 国产精品入口麻豆原神| 2022国产精品视频| 91精品国产色综合久久久蜜香臀| 在线观看区一区二| 99国产精品久久久久久久久久久| 国产一区激情在线| 久久精品国产澳门| 日韩精品一二三四| 亚洲午夜电影在线| 亚洲宅男天堂在线观看无病毒| 国产精品视频在线看| 国产午夜精品久久久久久久| 精品免费国产一区二区三区四区| 在线综合视频播放| 在线电影国产精品| 欧美高清视频一二三区 | 制服视频三区第一页精品| 欧美三级电影网站| 欧美日韩久久久| 欧美日韩激情一区二区三区|