Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Tạo 2 cửa sổ tại 2 vị trí cho trước?

  1. #1
    Ngày gia nhập
    11 2007
    Bài viết
    9

    Mặc định Tạo 2 cửa sổ tại 2 vị trí cho trước?

    Mình có hỏi vấn đề về cửa sổ ở topic trước và được bạn ngocbig rất nhiệt tình giải đáp nhưng thực sự vẫn chưa hiểu lắm.
    Đề bài là:
    (MFC)Tạo 2 cửa sổ với 2 tiêu đề (gì cũng đc), hiện lên tại 2 góc trái trên và phải dưới màn hình.
    Bạn nào chỉ giúp mình với

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    - Góc trái trên thì rất dễ, bạn cho top và left của cửa sổ sắp tạo = 0 là xong
    - Góc phải dưới thì bạn làm thế này :
    C++ Code:
    1. int scrw = GetDeviceCaps(hdc,HORZRES);
    2. int scrh = GetDeviceCaps(hdc,VERTRES);
    3. int left = scrw - windowWidth;
    4. int top = scrh - windowHeight;
    trong đó windowWidth và windowHeight là kích thước của cửa sổ sắp tạo.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    No Avatar
    ngocbig Khách

    Hic! Sao bạn phải tạo topic mới như vậy. Nếu có gì thắc mắc thì mình cùng bàn luận trong cái topic cũ cũng đc à. Có vẻ như bạn chỉ cần tạo ra hai cửa sổ ở hai vị trí mong muốn trên (miễn là nó xuất hiện như thế còn code thế nào cũng đc thì phải) vậy thì mình xin sửa cái code của chính bạn. Bạn xem có đc như ý muốn không nhé. Còn nếu là mình sẽ không hài lòng với đoạn code như vậy.

    C++ Code:
    1. #include<afxwin.h>
    2.  
    3. class CMyApp:public CWinApp
    4. {
    5. public:
    6.     BOOL InitInstance();
    7. };
    8.  
    9. class CMyWin:public CFrameWnd
    10. {
    11. public:
    12.     CMyWin(char *s);
    13. };
    14.  
    15. CMyApp theApp;
    16.  
    17. BOOL CMyApp::InitInstance()
    18. {
    19.     int w=300,h=400;
    20.     //======Get screen resolution=========
    21.     // width
    22.     int cx = ::GetSystemMetrics(SM_CXSCREEN);
    23.     // height
    24.     int cy = ::GetSystemMetrics(SM_CYSCREEN);
    25.  
    26.     m_pMainWnd=new CMyWin("A");
    27.     m_pMainWnd->ShowWindow(m_nCmdShow);
    28.     m_pMainWnd->SetWindowPos(NULL,0,0,w,h,SWP_SHOWWINDOW);
    29.  
    30.     m_pMainWnd=new CMyWin("B") ;
    31.     m_pMainWnd->ShowWindow(m_nCmdShow);
    32.     m_pMainWnd->SetWindowPos(NULL,cx-w,cy-h,w,h,SWP_SHOWWINDOW);
    33.     return true;
    34. }
    35.  
    36. CMyWin::CMyWin(char *s)
    37. {  
    38.     Create(NULL,s);
    39.     HWND MyHwnd = this->m_hWnd;
    40. }

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    9

    Thank bạn meoconlongvang và bạn ngocbig.
    Do trước nay làm là chỉ toàn trên 1 cửa sổ nên khi làm CT có 2 cửa sổ trở lên thì có nhiều chỗ chưa hiểu.
    Lấy VD ở trên ra làm nhưng không biết cách xác định cửa sổ cần tác động.
    (Vì dùng SetWindowPos() có tham số HWND hWnd xác định handle của cửa sổ cần tác động)
    Bạn meocon đã trả lời là dùng: HWND MyHwnd = this->m_hWnd;
    Nhưng mình vẫn chưa biết sử dụng, các bạn có VD đơn giản nào dùng hàm trên thì share mình với
    Với bài của mình làm như cách của ngocbig thì chỗ nào là chưa được, bạn ngocbig và các bạn góp ý giúp mình mới, thank
    Đã được chỉnh sửa lần cuối bởi ntd2012 : 16-12-2008 lúc 08:09 PM.

  5. #5
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn làm như vầy thì cửa sổ sẽ hiện ở góc phải dưới :

    C++ Code:
    1. BOOL CTestApp::InitInstance()
    2. {
    3.     ...............................
    4.  
    5.     m_pMainWnd->ShowWindow(SW_SHOW);
    6.     m_pMainWnd->UpdateWindow();
    7.  
    8.  
    9.     RECT r;
    10.  
    11.     m_pMainWnd->GetWindowRect(&r);
    12.  
    13.     int x = ::GetSystemMetrics(SM_CXSCREEN) - (r.right - r.left);
    14.     int y = ::GetSystemMetrics(SM_CYSCREEN) - (r.bottom - r.top);
    15.    
    16.     ::SetWindowPos(m_pMainWnd->m_hWnd,0,x,y,0,0,SWP_NOSIZE);
    17.    
    18.     return TRUE;
    19. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn