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

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

?? simgui.cpp

?? window下的多線程編程參考書。值得一讀
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

afx_msg void CDiningSimWindow::OnRun() {
    // start the simulation running...
    ShowUserMessage("Starting...");
    StartSimulation();
    ShowUserMessage("Running.");
}

afx_msg void CDiningSimWindow::OnStop() {
    // tell the simulation to stop...
    ShowUserMessage("Stopping...");
    StopSimulation();
    ShowUserMessage("Ready.");
}

afx_msg void CDiningSimWindow::OnUpdateRunUI( CCmdUI *pCmdUI) {
    // set the state of the RUN menu option...
    pCmdUI->Enable(!m_bRunning);
}

afx_msg void CDiningSimWindow::OnUpdateStopUI( CCmdUI *pCmdUI) {
    // set the state of the STOP menu option...
    pCmdUI->Enable(m_bRunning);
}

afx_msg void CDiningSimWindow::OnExit() {
    // tell the application to terminate...
    PostMessage( WM_CLOSE);
}

afx_msg void CDiningSimWindow::OnDestroy() {
    // ensure the the simulation has stopped before
    // we destroy the window...
    ShowUserMessage("Shutting down...");
    StopSimulation();
    ShowUserMessage("Finished.");
}

// CDiningSimWindow user defined message handler functions...
afx_msg LONG CDiningSimWindow::OnDiningSimPhilosopherUpdate( UINT uPhilosopher, LONG lNewState) {
    // change the philosopher state...
    m_nPhilosopherState[uPhilosopher] = lNewState;

    // get the window device context...
    CDC *pDC = GetDC();

    // align the DC origin with the scroll position...
    pDC->SetWindowOrg( m_nHScrollPos, m_nVScrollPos);
    
    // update the display...    
    DrawPhilosopher( pDC, uPhilosopher);
    ReleaseDC(pDC);

    return 0;
}

afx_msg LONG CDiningSimWindow::OnDiningSimForkUpdate( UINT uFork, LONG lNewState) {
    // change the fork state...
    m_nForkState[uFork] = lNewState;

    // get the window device context...
    CDC *pDC = GetDC();

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

    // update the display...
    DrawFork( pDC, uFork);
    ReleaseDC(pDC);

    return 0;
}

// CDiningSimWindow simulation control functions...
void CDiningSimWindow::StartSimulation(void) {
    // run the simulation if it is stopped...
    if (!m_bRunning) {
        m_cSimulation.Run();
        m_bRunning = TRUE;
    }
}

void CDiningSimWindow::StopSimulation(void) {
    // stop the simulation if it is running...
    if (m_bRunning) {
        m_cSimulation.Stop();
        m_bRunning = FALSE;
    }
}

void CDiningSimWindow::ShowUserMessage( CString csMessage) {
    // set the user message and update the display...
    m_csUserMessage = csMessage;

    // get the window device context...
    CDC *pDC = GetDC();

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

    // update the display...
    DrawUserMessage(pDC);
    ReleaseDC(pDC);
}

// CDiningSimWindow drawing functions...
void CDiningSimWindow::DrawSimulation(CDC *pDC) {
    // get the window client area...
    CRect cr;
    GetClientRect(cr);

    // compute the center of the scrollable window...
    CPoint cpt( WINDOW_WIDTH >> 1, WINDOW_HEIGHT >> 1);

    // draw table in center of window...
    CBrush cb;
    cb.CreateStockObject(NULL_BRUSH);
    CBrush *pOldBrush = pDC->SelectObject(&cb);
    CPen cp;
    cp.CreateStockObject(WHITE_PEN);
    CPen *pOldPen = pDC->SelectObject(&cp);
    pDC->Ellipse( cpt.x - m_nTableSide/2, cpt.y - m_nTableSide/2, cpt.x + m_nTableSide/2, cpt.y + m_nTableSide/2);
    pDC->SelectObject(pOldBrush);
    pDC->SelectObject(pOldPen);

    // create a DC to use for drawing bitmaps...
    CDC mdc;
    mdc.CreateCompatibleDC(pDC);

    // used for computing drawing locations...
    POINT pt;

    // used to iterate over the seating positions...
    int nSeat;
    int iRadius;

    // draw the bowls...
    CBitmap *pOldBitmap = mdc.SelectObject(&m_cbmBowl);
    iRadius = m_nTableSide/2 - BOWL_SPACING;
    for (nSeat = 0; nSeat < NUMBER_PHILOSOPHERS; nSeat++) {
        pt = ComputeSeatPosition( cpt, NUMBER_PHILOSOPHERS, nSeat, iRadius);
        pt.x -= BITMAP_WIDTH >> 1;
        pt.y -= BITMAP_HEIGHT >> 1;        
        pDC->BitBlt( pt.x, pt.y, BITMAP_WIDTH, BITMAP_HEIGHT, &mdc, 0, 0, SRCCOPY);
    }
    mdc.SelectObject(pOldBitmap);

    // draw the philosophers...
    for (nSeat = 0; nSeat < NUMBER_PHILOSOPHERS; nSeat++) {
        DrawPhilosopher( pDC, nSeat);
    }

    // draw the forks...
    for (nSeat = 0; nSeat < NUMBER_PHILOSOPHERS; nSeat++) {
        DrawFork( pDC, nSeat);
    }

    // draw the current user message...
    DrawUserMessage( pDC);
}

void CDiningSimWindow::DrawPhilosopher(CDC *pDC, UINT uPhilosopher) {
    // get the window client area...
    CRect cr;
    GetClientRect(cr);

    // compute the center of the scrollable window...
    CPoint cpt( WINDOW_WIDTH >> 1, WINDOW_HEIGHT >> 1);

    // create a DC to use for drawing bitmaps...
    CDC mdc;
    mdc.CreateCompatibleDC(pDC);

    // compute philosopher distance from table center...
    int iRadius = m_nTableSide/2 + PHILOSOPHER_SPACING;

    // compute the upper-left corner of the blit rectangle...
    POINT pt = ComputeSeatPosition( cpt, NUMBER_PHILOSOPHERS, uPhilosopher, iRadius);
    pt.x -= BITMAP_WIDTH >> 1;
    pt.y -= BITMAP_HEIGHT >> 1;        

    // blit the current philosopher image...
    CBitmap *pOldBitmap = mdc.SelectObject(&m_cbmPhilosophers);
    pDC->BitBlt( pt.x, pt.y, BITMAP_WIDTH, BITMAP_HEIGHT, &mdc, BITMAP_WIDTH*m_nPhilosopherState[uPhilosopher], 0, SRCCOPY);
    mdc.SelectObject(pOldBitmap);
}

void CDiningSimWindow::DrawFork(CDC *pDC, UINT uFork) {
    // get the window client area...
    CRect cr;
    GetClientRect(cr);

    // compute the center of the scrollable window...
    CPoint cpt( WINDOW_WIDTH >> 1, WINDOW_HEIGHT >> 1);

    // create a DC to use for drawing bitmaps...
    CDC mdc;
    mdc.CreateCompatibleDC(pDC);

    // compute philosopher distance from table center...
    int iRadius = m_nTableSide/2 + PHILOSOPHER_SPACING;

    // compute the upper-left corner of the blit rectangle...
    POINT pt = ComputeForkPosition( cpt, NUMBER_PHILOSOPHERS, uFork, iRadius);
    pt.x -= BITMAP_WIDTH >> 1;
    pt.y -= BITMAP_HEIGHT >> 1;        

    // blit the current fork image...
    CBitmap *pOldBitmap = mdc.SelectObject(&m_cbmForks);
    pDC->BitBlt( pt.x, pt.y, BITMAP_WIDTH, BITMAP_HEIGHT, &mdc, BITMAP_WIDTH*m_nForkState[uFork], 0, SRCCOPY);
    mdc.SelectObject(pOldBitmap);
}

void CDiningSimWindow::DrawUserMessage(CDC *pDC) {
    // draw the current user message text string m_csUserMessage
    // in the upper-left corner of the window...
    COLORREF crOldTextColor = pDC->SetTextColor(RGB(0,255,0));
    COLORREF crOldBkColor = pDC->SetBkColor(RGB(0,0,0));

    // draw OPAQUE with the previous text rect to make sure that
    // we erase the previous message...
    pDC->ExtTextOut( 0, 0, ETO_OPAQUE, m_crLastTextRect, m_csUserMessage, NULL);

    pDC->SetTextColor(crOldTextColor);
    pDC->SetBkColor(crOldBkColor);

    // save the text rect for later erasing...
    CSize cz = pDC->GetTextExtent(m_csUserMessage);
    m_crLastTextRect = CRect( 0, 0, cz.cx, cz.cy);        
}

// CDiningSimWindow helper functions...
POINT CDiningSimWindow::ComputeSeatPosition( POINT ptCenter, int nPositions, int iPosition, int iRadius) {
    POINT pt;        
    double rad = iPosition * (2 * 3.14159) / nPositions;
    pt.x = (int)(ptCenter.x + sin(rad) * iRadius);
    pt.y = (int)(ptCenter.y - cos(rad) * iRadius);
    return pt;
}

POINT CDiningSimWindow::ComputeForkPosition( POINT ptCenter, int nPositions, int iPosition, int iRadius) {
    POINT pt;        
    double rad = (iPosition - 0.50) * (2 * 3.14159) / nPositions;
    pt.x = (int)(ptCenter.x + sin(rad) * iRadius);
    pt.y = (int)(ptCenter.y - cos(rad) * iRadius);
    return pt;
}

void CDiningSimWindow::ErrorExit( LPCTSTR lpMsg) {
    ::MessageBox( NULL, lpMsg, "DiningSim Fatal Error - Program will Exit", MB_ICONSTOP);
    ::ExitProcess(0xFFFFFFFF);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品中文字幕在线不卡尤物 | 欧美tickling网站挠脚心| 91麻豆精品国产91久久久| 国产精品久久综合| 精品在线视频一区| 欧美日韩国产高清一区二区三区 | 国产99久久久国产精品潘金| 欧美日韩成人综合天天影院| 亚洲色欲色欲www| 久久99国产精品成人| 在线这里只有精品| 中文字幕一区二区在线观看| 久久精品国产一区二区三区免费看| 在线精品视频小说1| 国产精品视频一二三区| 精品一区二区三区的国产在线播放| 日本福利一区二区| 国产精品你懂的在线欣赏| 久久精品av麻豆的观看方式| 欧美最猛性xxxxx直播| 国产精品婷婷午夜在线观看| 国产福利精品导航| 日韩一区二区精品| 日韩国产欧美在线播放| 一本大道久久a久久精品综合| 国产午夜精品在线观看| 激情综合网天天干| 欧美久久久久久蜜桃| 亚洲一区影音先锋| 色婷婷综合久久久久中文一区二区| 日本一区二区免费在线观看视频| 激情久久五月天| 日韩午夜av一区| 国产最新精品精品你懂的| 欧美一区二区三区四区视频| 亚洲一区二区av在线| 日本伦理一区二区| 一区二区三区中文字幕电影| 欧美日韩综合不卡| 欧美经典一区二区| 美女久久久精品| 久久久精品黄色| www.在线成人| 一区二区三区四区视频精品免费| 欧美亚洲综合久久| 免费成人在线观看视频| 精品免费日韩av| 精品一区中文字幕| 国产精品色婷婷| 欧美色图第一页| 激情深爱一区二区| 国产精品二三区| 欧美精品久久久久久久多人混战| 美女被吸乳得到大胸91| 久久综合九色综合欧美98| 成人福利视频在线看| 夜夜嗨av一区二区三区网页 | 日本色综合中文字幕| 精品国内二区三区| aaa亚洲精品一二三区| 亚洲欧美成aⅴ人在线观看| 国产在线精品不卡| 国产欧美日韩不卡免费| 91搞黄在线观看| 人禽交欧美网站| 国产欧美一区在线| 欧美日韩国产一二三| 国产精品99久久久久久有的能看| 1024精品合集| 精品粉嫩aⅴ一区二区三区四区| 粗大黑人巨茎大战欧美成人| 偷偷要91色婷婷| 国产精品区一区二区三| 欧美一区二区三区免费视频| 成人美女在线视频| 日韩二区三区四区| 中文字幕一区二区三区在线播放| 欧美人体做爰大胆视频| 国产精品白丝jk黑袜喷水| 一区二区三区日韩欧美精品| 久久精品亚洲精品国产欧美| 欧美午夜精品一区| av在线综合网| 国产一区二区三区免费| 偷拍与自拍一区| 亚洲色图欧美偷拍| 久久久久国产精品麻豆ai换脸| 欧美日韩在线播放一区| 国产精品99久久久久久有的能看| 亚洲国产精品久久艾草纯爱| 亚洲天堂免费看| wwww国产精品欧美| 欧美久久久久免费| 在线免费一区三区| 波多野结衣的一区二区三区| 视频一区视频二区中文| 亚洲一区视频在线观看视频| 三级不卡在线观看| 亚洲蜜臀av乱码久久精品| 国产喷白浆一区二区三区| 欧洲av在线精品| 99久久99精品久久久久久| 国产精品原创巨作av| 免费视频最近日韩| 中文字幕中文字幕一区二区| 久久精品免费在线观看| 久久久久久久久久久黄色| 91精品国产综合久久福利 | 久久亚洲精品小早川怜子| 欧美精品 日韩| 欧美久久一二区| 在线成人av影院| 日韩一区二区视频在线观看| 91精品久久久久久久久99蜜臂| 欧美三区在线观看| 欧美理论片在线| 91麻豆精品国产91久久久| 日韩一二三四区| 久久综合九色综合97婷婷女人 | 激情综合色播激情啊| 蜜桃av噜噜一区| 激情六月婷婷久久| 国产精品一区二区你懂的| 国产成人综合亚洲91猫咪| 成人午夜在线免费| 色婷婷久久99综合精品jk白丝 | 首页综合国产亚洲丝袜| 日本不卡在线视频| 国产麻豆视频精品| www.日本不卡| 色婷婷亚洲婷婷| 日韩一区二区在线播放| 国产婷婷色一区二区三区四区| 国产精品区一区二区三区| 精品无人区卡一卡二卡三乱码免费卡 | 精品剧情在线观看| 国产片一区二区| 亚洲一区在线电影| 老司机免费视频一区二区 | 在线中文字幕一区| 欧美一区二区国产| 337p日本欧洲亚洲大胆色噜噜| 国产精品久久久久影院| 亚洲电影第三页| 激情成人综合网| 91久久精品午夜一区二区| 日韩网站在线看片你懂的| 国产精品伦理一区二区| 午夜精品久久久久久久久久久| 精品一区二区精品| 99精品久久只有精品| 91精品国产综合久久精品麻豆| 久久蜜臀精品av| 亚洲一区影音先锋| 国产激情一区二区三区| 91麻豆免费视频| 日本不卡一区二区| 中文字幕av一区二区三区免费看 | 夜夜亚洲天天久久| 理论片日本一区| 99久久久久久| 久久亚洲捆绑美女| 亚洲一区二区欧美| 成人午夜碰碰视频| 日韩精品在线一区二区| 亚洲精选免费视频| 高清视频一区二区| 精品国产三级电影在线观看| 亚洲成人免费看| 不卡的av在线| 欧美日韩免费一区二区三区| 国产日韩v精品一区二区| 午夜激情久久久| 91啦中文在线观看| 欧美国产日韩一二三区| 精品一区二区三区在线观看国产| 色婷婷一区二区三区四区| 国产日韩一级二级三级| 美女在线一区二区| 欧美丰满嫩嫩电影| 亚洲黄色尤物视频| www.亚洲精品| 国产欧美一区二区三区在线老狼| 亚洲成人免费在线观看| av一区二区三区黑人| 欧美mv日韩mv国产网站app| 亚洲成人黄色影院| 91视频一区二区| 国产日韩欧美精品一区| 免费观看日韩电影| 欧美精品在欧美一区二区少妇| 亚洲免费资源在线播放| 99久久久久久| 亚洲精品ww久久久久久p站| 99久久国产综合精品女不卡| 亚洲bt欧美bt精品777| 日韩二区三区四区| 欧美一区二区三区在线观看视频| 成人国产一区二区三区精品| 国产精品综合二区|