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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 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;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区在线观看| 一区二区三区久久| 国产精品灌醉下药二区| 亚洲h在线观看| 国产宾馆实践打屁股91| 欧美日高清视频| 亚洲精品乱码久久久久久久久| 精品中文av资源站在线观看| 色综合久久六月婷婷中文字幕| 久久免费视频色| 蜜臀91精品一区二区三区 | 欧美日韩精品一区二区三区蜜桃 | 91精品国产高清一区二区三区蜜臀| 国产亚洲精品bt天堂精选| 免费高清在线视频一区·| 欧美天堂一区二区三区| 国产精品免费视频一区| 国产乱色国产精品免费视频| 欧美日韩免费在线视频| 亚洲精品日韩综合观看成人91| 成人小视频在线| 国产偷v国产偷v亚洲高清| 日韩av中文在线观看| 欧美三级中文字幕| 亚洲综合精品久久| 欧美午夜精品理论片a级按摩| 亚洲私人黄色宅男| 91免费国产视频网站| 自拍偷拍亚洲激情| 99国产麻豆精品| 一区视频在线播放| 91麻豆免费看| 亚洲综合一二区| 欧美日韩免费一区二区三区视频 | 婷婷成人综合网| 91 com成人网| 日本va欧美va瓶| 精品国精品自拍自在线| 国产福利一区二区三区视频在线 | 色综合天天做天天爱| 久久69国产一区二区蜜臀| 日韩精品一区二区三区在线观看| 日韩av中文字幕一区二区三区| 日韩欧美亚洲另类制服综合在线| 日本免费在线视频不卡一不卡二| 日韩欧美国产wwwww| 国产综合色产在线精品| 日本一二三不卡| 色视频欧美一区二区三区| 亚洲一区二区三区四区在线| 欧美一区二区国产| 国内久久精品视频| 亚洲激情五月婷婷| 日韩精品中文字幕一区二区三区 | 日韩av中文字幕一区二区三区| 日韩一区二区免费在线电影| 国产综合色产在线精品| 一区精品在线播放| 欧美一区二区私人影院日本| 国产一区不卡在线| 亚洲欧美日韩国产成人精品影院 | 日韩vs国产vs欧美| 欧美极品xxx| 欧美人与性动xxxx| 成人中文字幕合集| 五月天激情综合| 国产精品美女久久久久aⅴ| 欧美色国产精品| 国产不卡视频一区二区三区| 午夜久久电影网| 国产精品网友自拍| 日韩一区二区精品葵司在线| 不卡av在线网| 精品一区二区久久| 亚洲曰韩产成在线| 国产亚洲精品aa| 欧美一区二区久久| 欧日韩精品视频| 成人黄色片在线观看| 日日摸夜夜添夜夜添亚洲女人| 国产欧美日韩激情| 日韩西西人体444www| 色综合久久久久久久久| 国产一区二区精品久久| 日本三级亚洲精品| 一区二区三区在线不卡| 欧美国产视频在线| 欧美tickling挠脚心丨vk| 欧美日韩在线精品一区二区三区激情| 国产成人精品1024| 韩国成人精品a∨在线观看| 亚洲成人免费在线观看| 亚洲美女偷拍久久| 中文字幕一区二区5566日韩| 久久蜜桃香蕉精品一区二区三区| 日韩欧美亚洲国产另类| 欧美高清视频在线高清观看mv色露露十八 | 99久久综合色| 高清不卡一区二区| 国产一区二区h| 久久99精品久久久久久国产越南| 亚洲国产精品尤物yw在线观看| 久久国产视频网| 免费日韩伦理电影| 日韩av在线发布| 日本 国产 欧美色综合| 亚洲第一电影网| 亚州成人在线电影| 亚洲韩国一区二区三区| 亚洲r级在线视频| 亚洲图片自拍偷拍| 亚洲成av人影院| 亚洲线精品一区二区三区八戒| 亚洲欧美日韩中文字幕一区二区三区| 国产日韩欧美一区二区三区乱码| 国产三级一区二区| 中文字幕免费一区| 中文字幕亚洲区| 亚洲乱码国产乱码精品精98午夜| ...av二区三区久久精品| 中文字幕中文字幕在线一区| 国产精品欧美综合在线| 国产精品福利一区二区三区| 亚洲日韩欧美一区二区在线| 亚洲黄一区二区三区| 三级不卡在线观看| 蜜桃视频在线观看一区二区| 精品一区在线看| 成人深夜视频在线观看| 色8久久人人97超碰香蕉987| 欧美日韩一区二区欧美激情| 91麻豆精品国产综合久久久久久| 日韩欧美国产成人一区二区| 久久精品一区八戒影视| 亚洲天堂av一区| 91视频一区二区三区| 欧美日韩久久久久久| 91精品国产欧美日韩| 欧美精品一区二区三区蜜桃视频 | 99在线精品视频| 欧美四级电影网| 精品国产免费视频| 一色屋精品亚洲香蕉网站| 天堂影院一区二区| 粉嫩av亚洲一区二区图片| 欧美日韩中文一区| 欧美韩日一区二区三区四区| 亚洲伊人色欲综合网| 精品一区二区三区免费| 91麻豆自制传媒国产之光| 日韩三级电影网址| 亚洲素人一区二区| 国产一区二区三区观看| 日本乱人伦一区| 久久久久久久久久久久久久久99| 亚洲精品视频在线观看网站| 国产毛片精品视频| 欧美日韩中文精品| 国产精品不卡一区| 国产一区不卡精品| 欧美精品成人一区二区三区四区| 国产精品久久久久久久久免费樱桃 | 欧美片网站yy| 国产精品女主播av| 久久国产精品99精品国产 | 亚洲成人免费看| 波多野结衣亚洲一区| 日韩欧美一区二区免费| 亚洲一区二区成人在线观看| 国产成a人亚洲| 欧美一区二区三区视频免费播放 | 美日韩一区二区三区| 91久久人澡人人添人人爽欧美| 久久久久99精品国产片| 日日夜夜免费精品视频| 色综合久久88色综合天天免费| 精品国产区一区| 日本va欧美va精品| 欧美日韩国产综合视频在线观看| 中文字幕av一区二区三区免费看 | 91美女在线观看| 中文字幕高清一区| 国产一区二区三区精品欧美日韩一区二区三区 | jlzzjlzz亚洲女人18| 久久综合色播五月| 免费成人你懂的| 88在线观看91蜜桃国自产| 亚洲精品水蜜桃| 色就色 综合激情| 亚洲免费伊人电影| www.色综合.com| 亚洲欧洲成人精品av97| 精品国产在天天线2019| 久久99久国产精品黄毛片色诱| 欧美日产在线观看| 日韩成人一级大片| 精品久久久三级丝袜| 精东粉嫩av免费一区二区三区| 欧美成人aa大片| 国产精品资源在线看|