我試圖從我的客戶端矩形中使用成員變量,但他們持有極其負值,如-858993460。即使當我調用rect.Width()時,它也會返回一個極其負數的數字。當我選擇我在屏幕上繪製的波時,我需要這些值來確定要播放的波形文件的相應部分。有誰會碰巧知道爲什麼可以這樣做?CRect成員變量有奇怪的值
注意:爲了看看它們保留的是什麼值,我拋出了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;
}
-858993460是0xCCCCCCCC,這是調試器表達「未初始化的變量」的方式。我的猜測是'GetClientRect'調用由於某種原因失敗,並且使'rect'未初始化。或許你的觀點在某種程度上目前還沒有一個有效的'HWND'。 –
你知道會導致什麼嗎?我的觀點工作得很好,因爲它吸收了它應有的一切。 – Otto45
那麼,你可以先檢查'GetClientRect'的返回值,如果失敗,用'GetLastError'檢查原因。 –