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

C++빌더 Q&A
C++Builder Programming Q&A
[6799] Re:[답변] 작업표시줄 크기 얻기
남병철 [lezo] 3438 읽음    2001-04-13 14:50
남병철 님이 쓰신 글 :
: 윈도우에서 작업표시줄의 위치를 알고싶습니다.
: 아직 윈32프로그래밍은 꽝이라서 윈도우 객체에 대해서는 잘모르지만 분명 접근하는 방법이 있을걸로
: 생각됩니다.
: Screen->Width만으로는 작업표시줄이 위로 높이 올라왔을때 실제 스크린의 크기는 알 수 없었던걸로
: 알고있습니다.
: 순수 스크린만의 크기는 어떻게 구해야하나요?

자문자답이지만 어케든 구했습니다.. ^^;
에구.. 오늘 몸도 않좋은데 참.. 쩝.. 그럼 간단히 적어보죠.

typedef struct _AppBarData
{
    DWORD cbSize;
    HWND hWnd;
    UINT uCallbackMessage;
    UINT uEdge;
    RECT rc;
    LPARAM lParam; // message specific
} APPBARDATA, *PAPPBARDATA;

위의 구조체와...

SHSTDAPI_(UINT) SHAppBarMessage(DWORD dwMessage, PAPPBARDATA pData);

위의 함수를 사용했습니다. (비베 API 라이브러리에서 참고했음. ㅡ.ㅡ;;)

간신히 엑세스 바이얼레이션을 피해서 어떻게든 값은 구했습니다.
(지금도 머리가 어찔어찔하네요. ㅡㅡ;)

소스는 정말 간단합니다.
위의 구조체를 선언해주고 구조체에 크기를 세팅해주고 위의 함수를 사용해서 태스크바의 크기를
구하면 됩니다. ( ㅡㅡ; 하여간 빨리 API를 마스터해야혐.. ㅡㅡ; 쩝.. )

이런것 하나에 넘 체력낭비가 심하네요.. ㅡㅡ;
내일은 더 나아질것을 기대하며.. T__T
이상 자문자답이었습니다.

ps. 수정하거나 보강할 부분이 있으면 추가답변 부탁합니다. ^___^;


<소스>
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    long TaskBarH;
    APPBARDATA structBarData;

    long l, r, t, b;

    structBarData.cbSize = (unsigned long)sizeof(APPBARDATA);

    TaskBarH = SHAppBarMessage(ABM_GETTASKBARPOS, &structBarData);

    l = structBarData.rc.left;
    r = structBarData.rc.right;
    t = structBarData.rc.top;
    b = structBarData.rc.bottom;

    Label1->Caption = IntToStr(t);
    Label2->Caption = IntToStr(l);
    Label3->Caption = IntToStr(r);
    Label4->Caption = IntToStr(b);
}
:보시면 아시겠지만 버튼하나에 라벨4개랍니다.(디기 단순하당.. ㅡㅡ;)

+ -

관련 글 리스트
6794 [질문] 작업표시줄 크기 얻기 남병철 2352 2001/04/13
6799     Re:[답변] 작업표시줄 크기 얻기 남병철 3438 2001/04/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.