我开发了一个用于windows mobile手机上的界面,界面是用vc对话框做的,我做了两个对话框,点击第一个对话框的按钮,调用第二个对话框,这时不知为什么只有双击,界面才会有反应。我跟踪调试了,发现单击时也运行了相应的程序,可是在界面上就是体现不出变化,只有双击才会有变化。但是如果只有一个对话框的话,单击完全可以响应界面的变化,请教各位高人,谁知道哪出问题了?

解决方案 »

  1.   

    我用的不是按钮,是判断是否点击的相应区域。我在新建的一个工程的对话框试过,单击有效。但是加到另一个已有一个对话框的工程中,并通过这个已有对话框来调用新加的对话框,就是双击才会引起界面的变化。但事实我也跟踪了,单击是可以进入相应的程序运行的,就是界面没有变化。我也用了InvalidateRect函数和updateWindow对界面刷新了,但是还是需要双击后界面才会有改变。部分代码如下:void PlayerUIDlg::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CPaintDC dc(this); // device context for painting
    //Retrun
    if ((point.x>=214 && point.x<=214+25) && (point.y>=2 && point.y<=2+24))
    {
    m_cdcButtonReturn.DeleteDC();
    m_cdcTmp.DeleteDC();
    m_BitmapBack.DeleteObject();
    BitmapTmp.DeleteObject(); m_cdcButtonReturn.CreateCompatibleDC(&dc);
    m_cdcTmp.CreateCompatibleDC(&dc);
    BitmapTmp.CreateCompatibleBitmap(&dc, 25, 24);      /////创建内存区域
    m_cdcButtonReturn.SelectObject(BitmapTmp); 
    ////创建足够内存区域
    //加载按下return图片
    m_BitmapBack.LoadBitmap(IDB_RETURN2);               /////加载背景位图
    m_cdcTmp.SelectObject(m_BitmapBack);
    m_cdcButtonReturn.BitBlt(0,0,25,24,&m_cdcTmp,0,0,SRCCOPY);
    InvalidateRect(CRect(214,2,214+25,2+24),TRUE);
    //更新窗口--必须的,否则不会显示新图片
    UpdateWindow();
    //退出程序操作
                      。。

            
    m_cdcButtonReturn.DeleteDC();
    m_cdcTmp.DeleteDC();
    m_BitmapBack.DeleteObject();
    BitmapTmp.DeleteObject(); m_cdcButtonReturn.CreateCompatibleDC(&dc);
    m_cdcTmp.CreateCompatibleDC(&dc);
    BitmapTmp.CreateCompatibleBitmap(&dc, 25, 24);      /////创建内存区域
    m_cdcButtonReturn.SelectObject(BitmapTmp); 
    ////创建足够内存区域
    //还原图片
    m_BitmapBack.LoadBitmap(IDB_RETURN);               /////加载背景位图
    m_cdcTmp.SelectObject(m_BitmapBack);
    m_cdcButtonReturn.BitBlt(0,0,25,24,&m_cdcTmp,0,0,SRCCOPY);
    InvalidateRect(CRect(214,2,214+25,2+24),TRUE); }
    CDialog::OnLButtonDown(nFlags, point);
    }