CRect成员变量具有奇怪的值

时间:2014-02-12 19:21:47

标签: visual-studio-2010 visual-c++ mfc

我正在尝试使用来自客户端rect的成员变量,但它们保持极其负值,如-858993460。即使我调用rect.Width(),它也会返回一个非常负数。当我选择在屏幕上绘制的波形时,我需要这些值来确定要播放的波形文件的相应部分。有人会碰巧知道为什么会这样做吗?

注意:我将int的右,左和宽度抛出,只是为了看看它们持有的是什么值。我真的只需要rect.Width()来缩放选择,以便能够访问我的wave文件的数据数组。

void CWaveEditView::OnToolsPlay32775()
{
    // TODO: Add your command handler code here
    CWaveEditDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if(!pDoc){
        return;
    }
    if(pDoc->wave.hdr==NULL){
        return;
    }
    if(selectionStart!=selectionEnd){
        CRect rect;
        GetClientRect(&rect);
        rect.NormalizeRect();
        int right = rect.right;
        int left = rect.left;
        int width = rect.Width();
        int startms=(1000.0*pDoc->wave.lastSample/pDoc->wave.sampleRate)*selectionStart/rect.Width();
        int endms=(1000.0*pDoc->wave.lastSample/pDoc->wave.sampleRate)*selectionEnd/rect.Width();
        WaveFile * selection = new WaveFile(pDoc->wave.numChannels, pDoc->wave.sampleRate, pDoc->wave.bitsPerSample);

        while(startms<=endms){
            selection->add_sample(pDoc->wave.get_sample(startms));
            startms++;
        }
        selection->updateHeader();
        selection->play();
        delete selection;
    }

1 个答案:

答案 0 :(得分:0)

CRect的默认构造函数不初始化其成员(因为它是RECT结构的薄包装器)。您可以将其初始化为(0,0,0,0),并在调用GetClientRect后检查它是否为空。

由于GetClientRect似乎失败,您可能需要使用GetSafeHwnd()检查窗口句柄是否有效。