字体
第(4/7)页
关灯
   存书签 书架管理 返回目录
    第9 章 多线程

    ·221·

    else

    return 1; // 颜色不对

    if( hMutex == NULL )

    {

    AfxMessageBox("open Mutex error...");

    return 1;

    }

    // 循环,等待信号

    while ( true )

    {

    if ( WaitForSingleObject(hMutex, INFINITE) == WAIT_FAILED )

    {

    continue;

    }

    // 马前进

    if ( lpHorse->x < lpHorse->rect.right )

    {

    lpHorse->x ++;

    }

    // 重绘窗口

    InvalidateRect(lpHorse->hWnd, lpHorse->rect, TRUE);

    // 释放Mutex

    ReleaseMutex(hMutex);

    // 等待, 速度快的等待时间短

    Sleep(lpHorse->speed);

    }

    return 0;

    }

    (8)初始化对话框

    改写对话框的OnInitDialog,进行必要的初始化,代码如下:

    BOOL CRacingDlg::OnInitDialog()

    枫叶文学网www.fywxw.com

    Visual C++ 6.0 程序设计从入门到精通

    ·222·

    {

    ……

    // TODO: Add extra initialization here

    // 初始化Mutex

    InitMutexes();

    // 初始化对话框

    InitDlgItem();

    ……

    }

    (9)绘制场景

    为CRacingDlg 添加成员函数DrawScene,用来绘制赛马的场景,代码如下:

    // 绘制场景的函数

    void CRacingDlg::DrawScene(CPaintDC * pDC)

    {

    CRect rect;

    CBrush redBrush(RGB(255, 0, 0));

    CBrush greenBrush(RGB(0, 255, 0));

    CBrush blueBrush(RGB(0, 0, 255));

    CBrush* oldBrush;

    m_RacingBox.GetClientRect(rect);

    m_RacingBox.ClientToScreen(rect);

    pDC->Rectangle(rect);

    // 绘制红马

    if( m_hRed )

    {

    pDC->Rectangle(m_RedHorse.rect);

    oldBrush = pDC->Select
上一页 目录 下一页