C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[802] 멀티 모니터에서, 현재 TaskBar가 있는 화면을 찾기.
김태선 [cppbuilder] 6879 읽음    2008-09-13 11:54
//---------------------------------------------------------------------------
// 현재 TaskBar가 있는 모니터를 찾아 그 모니터의 인덱스를 돌린다. 물론 멀티모니터인 경우만 효과가 있다.

int    TFormMain::FindScreen_InPlace_TarkBar()
{
    if (Screen->MonitorCount == 1)
        return 0;

    HWND  hwnd = FindWindow("Shell_TrayWnd", "");
    if (hwnd == NULL)
        return 0;
    TRect  taskbar;
    GetWindowRect(hwnd, &taskbar);

    for(int c = 0; c < Screen->MonitorCount; c++)
    {
        TMonitor* r = Screen->Monitors[c];
        if (taskbar.Width() > taskbar.Height())    // 가로형 작업줄이면
        {
            if ((r->Left <= taskbar.left) &&
                (r->Left + r->Width >= taskbar.right) &&
                (r->Top - taskbar.Height() <= taskbar.top) &&
                (r->Top + r->Height + taskbar.Height() >= taskbar.bottom)
            )
                return c;
        }
        else    // 세로형 작업줄이면
        {
            if ((r->Left - taskbar.Width() <= taskbar.left) &&
                (r->Left + r->Width + taskbar.Width() >= taskbar.right) &&
                (r->Top <= taskbar.top) &&
                (r->Top + r->Height >= taskbar.bottom)
            )
                return c;
        }
    }
    return 0;
}
//---------------------------------------------------------------------------
장성호 [nasilso]   2008-12-05 11:18 X
완벽하다고 할수는 없지만 다음과 같은 방법도 될것 같습니다.
그냥 WorkArea 와 모니터 크기가 다른경우를 체크했습니다.

int __fastcall FindScreen_InPlace_TarkBar2()
{
    for(int c = 0; c < Screen->MonitorCount; c++)
    {
        TMonitor* r = Screen->Monitors[c];
        if(r->Width!=r->WorkareaRect.Width()) return c;
        if(r->Height!=r->WorkareaRect.Height()) return c;
    }
    return 0;
}

+ -

관련 글 리스트
802 멀티 모니터에서, 현재 TaskBar가 있는 화면을 찾기. 김태선 6879 2008/09/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.