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
[50665] 답변주셔서 고맙습니다.
구윤태 [] 1218 읽음    2007-09-28 12:59
장성호 님이 쓰신 글 :
: [서론]
: TOpenDialog를 비롯하여 공통Dialog(TCommonDialog)들은
: 모두  comdlg32.dll 에 있는 API를 호출하여 Dialog를 만듭니다.
: TOpenDialog의 경우도 Execute 할때 comdlg32.dll의 GetOpenFileNameA 같은 api를 호출하여
: Dialog를 열죠
: 다시 말해 Execute를 호출 하기전에는 TOpenDialog의 Handle이 없습니다.
: 즉 window의  Handle이 없다는것은 size조정 및 아무것도 할수 없겠죠
: (TOpenDialog에서 지원하지 않는이상)
:
:
: 그래서 결론적으로 방법은?
:
: Execute()를 호출한후에 TOpenDialog의 핸들을 가져와야 합니다.
: 여러가지 방법이 있겠지만 간단히 FindWindow로 할수 있겟죠
: FindWindow로 TOpenDialog의 Handle을 찾았으면 SetWindowPos로 size및 위치를 조정하면 되겟죠
:
: 여기서 문제가 있습니다.
: Execute()를 함수가 끝난후에는 이미 TOpenDialog도 닫혀진후라는것입니다.
: 그러므로 Execute()호출한 직후에 핸들을 찾아 SetWindowPos해야 하는것입니다.
:
:
: [방법1]
:
: TOpenDialog 의 OnShow이벤트에서 PostMessage를 날려서 메세지를 받는데서 SetWindowPos 한다.
:
: void __fastcall TForm1::OpenDialogShowAfter(TMessage &Msg)
: {
:     HWND  hWnd;
:     hWnd = FindWindow(NULL, "열기");
:    ::SetWindowPos( hWnd, HWND_TOPMOST, 0,0, 656,390, SWP_SHOWWINDOW );
: }
: void __fastcall TForm1::OpenDialog1Show(TObject *Sender)
: {
:     PostMessage(Handle,WM_USER+1,0,0);
: }
:
: 그런데 방법1은 문제점이 하나 있습니다.
: 문제점은 일단 Dialog가 떴다가 위치를 옮깁니다.
:
:
: [방법2]
:
: 쓰레드로 한다.
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:     class TCenterDialog : TThread
:     {
:         int X,Y;
:     public:
:         __fastcall TCenterDialog(int x,int y) : TThread(false) { X=x;Y=y;}
:         void __fastcall Execute()
:         {
:             FreeOnTerminate = true;
:             HWND  hWnd;
:             while((hWnd = FindWindow(NULL, "열기")) == NULL)
:                 Sleep(40);
:
:             ::SetWindowPos( hWnd, HWND_TOPMOST, X,Y, X+656,Y+390, SWP_SHOWWINDOW );
:         }
:     };
:     TCenterDialog*  pTemp = new TCenterDialog(50,10); pTemp;
:     OpenDialog1->Execute();
:
: }
: //---------------------------------------------------------------------------
:
: 쓰레드에 관해서는 아래 참조
: http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=670
:
: 그럼...
:
:
: 구윤태 님이 쓰신 글 :
: : 대화창이 중앙말고.
: :
: : 상당에서 100, 정도 떨어 지게 위치할려면 어떻게 해야되나요..
: :
: : 알려주세요ㅠㅠ

+ -

관련 글 리스트
50661 다이얼로그 대화창위치를 마음대로 정하고 싶은데.. 어떻게 해야되요 구윤태 3012 2007/09/28
50663     Re:다이얼로그 대화창위치를 마음대로 정하고 싶은데.. 어떻게 해야되요 장성호 2224 2007/09/28
50665         답변주셔서 고맙습니다. 구윤태 1218 2007/09/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.