2010-12-26 3 views
0

현재 일부 소프트웨어에 대해 GUI를 만들려고하고 있으며 일부 정적 컨트롤에 문제가 있습니다. 내 Windows 프로 시저에서 정적 컨트롤을 그릴 때에 대한 WM_CTLCOLORSTATIC 메시지가 있습니다. 메시지 내에서 IF ELSE 문을 사용하여 창 핸들을 창 핸들과 비교하여 그에 따라 창 함수를 수행합니다. 하나는 그려지는 동안 배경색이 설정되고 다른 하나는 정적 컨트롤의 테두리를 그리는 정적 텍스트 컨트롤입니다.Windows 프로 시저 메시지에 대해 Else 문이 작동하지 않는 경우

case WM_CTLCOLORSTATIC: 
    { 
     if (hwnd = ANNwindow->settingsborder) 
     { 
      SetBkMode((HDC)wParam, TRANSPARENT); 
      return (LRESULT)ANNwindow->backgroundbrush; 
     } 
     else if (hwnd = ANNwindow->settingstext) 
     { 
      DrawEdge((HDC)wParam, &ANNwindow->rect, EDGE_ETCHED, BF_BOTTOMRIGHT); 
      return (LRESULT)ANNwindow->backgroundbrush; 
     } 

    } 

settingsborder 및 settingstext는 GUI를 만들기위한 클래스의 창 핸들입니다.

if else 문의 순서를 바꾸면 순서에 관계없이 첫 번째 명령문 만 처리합니다. 배경색을 IF가 변경하면, 그렇게됩니다. 테두리를 그리는 것이 IF 아래에 있다면, 그 일을하지만, else 부분 아래에는 테두리가 생기지 않습니다. 이 문제를 찾을 수 없어서 C++ 언어를 사용하는 데있어 간단한 오류입니까? 도와주세요, 고마워요.

P. drawedge 부분에 대해서는 먼저 정적 컨트롤 테두리를 만든 다음 그 테두리를 사용하여 다른 방법으로해야합니까? 감사.

답변

3

다음은 문제입니다.

if (hwnd = ANNwindow->settingsborder) 

if (hwnd == ANNwindow->settingsborder) 
//  ^^ 

else if 문에 대해 동일해야합니다.

당신은 거의 항상 평등 시험을하는 대신 true를 반환하는 작업은, 당신의 hwndANNwindow->settingsborder의 내용을 할당하고 있습니다.

+0

와우, 그 중 하나를 보았어, 도움 주셔서 감사합니다. – contrapsych

4
  1. 컴파일러에서 경고를 활성화하십시오.
  2. 두 조건에서 비교 (==) 대신 할당 (=)을 사용하고 있습니다.
+2

+1 경고를 제안합니다. 그러나 "경고 사용"대신 "경고 수준 높이기"를 사용 하시겠습니까? – ltjax

관련 문제