2011-09-22 35 views
5

निम्नलिखित भीतर/मामले मेरे winproc में प्रकट होता है:स्विच एक स्विच/मामले

if(message == WM_CREATE) 
{ 
//Do WM_CREATE stuff 
} 

else 
{ 
    switch(message) 
    { 
     case WM_KEYDOWN: 
     { 
      switch(wParam) 
      { 
       case VK_LEFT: 
       { 
       //declare new variable here 
       D2D1_RECT_F bounds; 
       HRESULT hr = pDemoApp->mpGeometryGroup->GetBounds(pDemoApp->mTransform, &bounds); 
       } 
      } 
     } 
    } 
} 

वहाँ घोषित करने और चर इस तरह से उपयोग करने के साथ किसी भी समस्या है?

मैंने घोषित करने और सीमाओं का उपयोग करने के बाद ब्रेकपॉइंट स्थापित किया (अभी भी दायरे में) लेकिन मुझे इसे डीबगर में 'लोकल' विंडो में नहीं दिख रहा है। गलत क्या है?

मैं पोस्ट को असंबद्ध कोड के समूह के साथ स्पैम नहीं करना चाहता था, लेकिन यहां पूर्ण विनप्रोक है।

LRESULT CALLBACK DemoApp::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
LRESULT result = 0; 

if (message == WM_CREATE) 
{ 
    LPCREATESTRUCT pcs = (LPCREATESTRUCT)lParam; 
    DemoApp *pDemoApp = (DemoApp *)pcs->lpCreateParams; 

    ::SetWindowLongPtrW(
     hwnd, 
     GWLP_USERDATA, 
     PtrToUlong(pDemoApp) 
     ); 

    result = 1; 
} 
else 
{ 
    DemoApp *pDemoApp = reinterpret_cast<DemoApp *>(static_cast<LONG_PTR>(
     ::GetWindowLongPtrW(
     hwnd, 
     GWLP_USERDATA 
     ))); 

    bool wasHandled = false; 

    if (pDemoApp) 
    { 
     switch (message) 
     { 
     case WM_SIZE: 
      { 
       UINT width = LOWORD(lParam); 
       UINT height = HIWORD(lParam); 
       pDemoApp->OnResize(width, height); 
      } 
      result = 0; 
      wasHandled = true; 
      break; 

     case WM_DISPLAYCHANGE: 
      { 
       InvalidateRect(hwnd, NULL, FALSE); 
      } 
      result = 0; 
      wasHandled = true; 
      break; 

     case WM_PAINT: 
      { 
       pDemoApp->OnRender(); 
       ValidateRect(hwnd, NULL); 
      } 
      result = 0; 
      wasHandled = true; 
      break; 

     case WM_KEYDOWN: 
      { 
       D2D1_SIZE_F rtSize = pDemoApp->mpRenderTarget->GetSize(); 
       static float angle = 0.0f; 

       switch(wParam) 
       { 
       case VK_LEFT: 
        { 

         angle -= 90; 

         if(angle < -360) 
          angle = 0; 

         D2D1_RECT_F bounds; 
         HRESULT hr = pDemoApp->mpGeometryGroup->GetBounds(pDemoApp->mTransform, &bounds); 

          pDemoApp->mTransform = D2D1::Matrix3x2F::Rotation(
          angle, 
          D2D1::Point2F((bounds.right + bounds.left)/2, (bounds.bottom + bounds.top)/2) 
          ); 

          hr = hr; 


         InvalidateRect(hwnd, NULL, FALSE); 
         break; 
         } 

       case VK_RIGHT: 
        { 
         angle += 90; 

         if(angle > 360) 
          angle = 0; 

         D2D1_RECT_F bounds; 
         pDemoApp->mpGeometryGroup->GetBounds(pDemoApp->mTransform, &bounds); 

          pDemoApp->mTransform = D2D1::Matrix3x2F::Rotation(
          angle, 
          D2D1::Point2F((bounds.right + bounds.left)/2, (bounds.bottom + bounds.top)/2) 
          ); 


         InvalidateRect(hwnd, NULL, FALSE); 
         break; 
        } 

       case VK_DOWN: 
        { 
         pDemoApp->mTransform = pDemoApp->mTransform * D2D1::Matrix3x2F::Translation(
          0.0f, 
          5.0f); 

         InvalidateRect(hwnd, NULL, FALSE); 
         break; 
        } 
       } 
      } 
      result = 0; 
      wasHandled = true; 
      break; 

     case WM_LBUTTONDOWN: 
      { 
       FLOAT xPos, yPos; 

       xPos = LOWORD(lParam); 
       yPos = HIWORD(lParam); 

       BOOL contains = false; 

       pDemoApp->mpGeometryGroup->FillContainsPoint(
        D2D1::Point2F(xPos, yPos), 
        pDemoApp->mTransform, 
        &contains); 

       if(contains) 
        MessageBoxA(hwnd, "Hooray!", NULL, NULL); 

       D2D1_GEOMETRY_RELATION relation; 

       pDemoApp->mpGeometryGroup->CompareWithGeometry(
        pDemoApp->mpSecondGeometryGroup, 
        pDemoApp->mTransform, 
        0.001f, 
        &relation); 

       if(relation == D2D1_GEOMETRY_RELATION_CONTAINS || 
        relation == D2D1_GEOMETRY_RELATION_IS_CONTAINED || 
        relation == D2D1_GEOMETRY_RELATION_OVERLAP) 
       { 
        MessageBoxA(hwnd, "overlap or contains.", 0, 0); 
       } 


      } 
      result = 0; 
      wasHandled = true; 
      break; 

     case WM_DESTROY: 
      { 
       PostQuitMessage(0); 
      } 
      result = 1; 
      wasHandled = true; 
      break; 
     } 
    } 

    if (!wasHandled) 
    { 
     result = DefWindowProc(hwnd, message, wParam, lParam); 
    } 
} 

return result; 

}

+0

अभी भी किस दायरे में? डीबगर "स्कोप से बाहर हो सकता है" जैसे ही 'गेटबाउंड' रिटर्न के रूप में सीमाएं होती हैं, भले ही यह दिखाती है कि यह अभी भी उस पंक्ति को समाप्त कर रहा है। लाइन पर 'घंटा = घंटा;' रखो और देखें कि क्या इससे मदद मिलती है। –

+0

मैंने इसे बाद में रखा और यह अभी भी किसी कारण से दिखाई नहीं दे रहा है। मैं अन्य विवरणों के साथ पोस्ट को बग नहीं करना चाहता था, लेकिन मैं उपरोक्त संपूर्ण कोड पोस्ट करूंगा (अन्य डब्ल्यूएम संदेश निकाल रहा हूं)। एक सेकंड में वापस जांचें। – Kyle

+0

स्थानीय समस्या में दिखाई देने वाली एकमात्र समस्या चर नहीं है? क्या आप रिलीज बिल्ड में हैं? –

उत्तर

1

चर कि जिस तरह से, जब से तुम VK_LEFT मामले के लिए एक नया गुंजाइश निर्दिष्ट किया है की घोषणा में कोई समस्या नहीं है। यदि आप एक अलग दायरे की घोषणा नहीं कर रहे थे, तो चर संभवतः गैर-प्रारंभिक दिखाई देगी जो एक समस्या होगी। ध्यान दें कि आप रास्ते से कुछ breaks चूक गए हैं।

संबंधित मुद्दे