2017-12-01 5 views
0

진행률 표시 줄이있는 대화 상자가 있습니다. 진행률 표시 줄을 선택 윤곽으로 설정하는 대화 상자에 메서드를 추가하지 않아도됩니다. 나는 다음과 같은 시도 :진행률 막대를 일반에서 선택 윤곽으로 전환

void CDownloader::SetIntermediate(wstring info) 
{ 
    SetDlgItemText(IDC_DOWNLOADER_LABEL, info.c_str()); 

    auto style = GetWindowLong(GWL_STYLE); 
    style &= ~(PBS_SMOOTH | PBS_SMOOTHREVERSE | PBS_VERTICAL); 
    style |= PBS_MARQUEE; 
    SetWindowLong(GWL_STYLE, style); 

    RECT windowRect; 
    GetWindowRect(&windowRect); 
    SetWindowPos(HWND_TOP, &windowRect,SWP_FRAMECHANGED); 

    HWND progress = GetDlgItem(IDC_DOWNLOADER_PROGRESS); 
    ::SendMessage(progress, PBM_SETMARQUEE, TRUE, 100); 
} 

을하지만 이것은 내가 스타일을 업데이트를 SetWindowPos를 사용하여, 그것과 충돌 할 수 있습니다 제거 스타일을 움직이는하기 위해 윈도우 스타일을 설정 :(

작동하지 않고는 진행에 설정 . MARQUEE

나는 천막하는 디자이너에서 진행 표시 줄을 설정할 수 있지만 정상 혈중 알코올 농도를 전환 할 수 없습니다

+0

스타일 플래그를 변경하기 위해 SetWindowLong()을 사용하면 특히 진도 표시 줄에서 상을받지 못합니다. 간단한 해결 방법은 * 두 개를 만들고 사용자가 보길 원하는 내용에 따라 그 중 하나를 표시하는 것입니다. 아니면 그냥 평범한 DestroyWindow + CreateWindowEx. –

+0

그런 다음 코드를 작성하여 진행률 표시 줄을 정상으로 설정해야합니다. 그것은'PBS_MARQUEE' 스타일을 제거하고,'PBS_SMOOTH'를 다시 설정하는 것입니다. – VTT

+1

진행률 표시 줄 대신 * 대화 상자 *에 진행률 표시 줄 스타일을 설정하고 있습니다. ':: GetWindowLong (progress, GWL_STYLE)'및':: SetWindowLong (progress, GWL_STYLE, style);'이어야합니다. 또한'SetWindowPos'가 필요 없다고 생각합니다. – zett42

답변

1

를 올바른 코드 whant 모든를 들면 다음과 같습니다.

void CDownloader::SetPending(bool value) 
{ 
    if(value) 
    { 
     HWND progress = GetDlgItem(IDC_DOWNLOADER_PROGRESS); 
     auto style = ::GetWindowLong(progress, GWL_STYLE); 
     style |= PBS_MARQUEE; 
     ::SetWindowLong(progress, GWL_STYLE, style); 
     ::SendMessage(progress, PBM_SETMARQUEE, TRUE,0); 
    } 
    else 
    { 
     HWND progress = GetDlgItem(IDC_DOWNLOADER_PROGRESS); 
     auto style = ::GetWindowLong(progress, GWL_STYLE); 
     style &= ~PBS_MARQUEE; 
     ::SetWindowLong(progress, GWL_STYLE, style); 
     ::SendMessage(progress, PBM_SETMARQUEE, FALSE,0); 
    } 
} 
관련 문제