我正在尝试使用来自客户端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;
}
答案 0 :(得分:0)
CRect的默认构造函数不初始化其成员(因为它是RECT结构的薄包装器)。您可以将其初始化为(0,0,0,0),并在调用GetClientRect后检查它是否为空。
由于GetClientRect似乎失败,您可能需要使用GetSafeHwnd()检查窗口句柄是否有效。