Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Tadius
    "The SendMessage function sends the specified message to a window or windows. It calls the window procedure for the specified window and does not return until the window procedure has processed the message"
    Trích nguyên bản từ MSDN.

    1.Cái SendMessage bác truyền vô tham số thứ 2 là số hiệu thông điệp chứ ko phải ID của cửa sổ. Vì cửa sổ được đã được phân biệt bởi handle là HWND rồi.

    2.Nếu trong MFC thì bác nên tạo biến CEdit control kết nối đến TextBox là công cụ điều khiển để sau này dễ sử lý hơn.

    3.Khi đã kết nối biến điều tới control. Giả sử biến là m_wndEdit, khi đó bác chỉ cần gọi m_wndEdit.SendMessage. Đây là method đã được wrap Api bởi MFC trong đó tham số HWND đã được loại bỏ vì bản thân m_wndEdit là đối tượng chủ thể của method này.

    5.Theo giải thích của MSDN sau khi gọi SendMessage thì message sẽ được đưa vào hàng đợi chờ tới message được sử lý thì lúc đó hàm SendMessage mới thực sự kết thúc và thực hiện lệnh tiếp theo. Vì thế em ko hiểu ở đây tại sao bác lại đưa cái SendMessage vào while lặp vô tận???

    6.Ở đây em cũng không rõ bác muốn truyền cái message gì. Tuy nhiên theo em đoán thì ý định của bác ở đây là muốn đặt Text cho cái EditBox
    Để thiết lập Text cho Edit box em xin liệt kê ra một số hàm:
    a. m_wndEdit.SetWindowText(L"Hello");
    b. Dùng API SetWindowText(m_wndEdit.m_hWnd,L"Hello");
    c. Dùng hàm khác SetDlgItemTextW(HWND hwndDlg,UINT nID,LPCWSTR string); Trong đó hwndDlg là Handle của Dialog, nID là ID của TextBox và string là xâu mà bác muốn xét.

    7.Khi bác gọi tham gọi _beginthread(SendMSM,0,NULL); thì cái tham số được truyền trong hàm void SendMSM(PVOID Plam) là Plam=NULL.
    Việc gửi một thông điệp đến cửa số có Handle là NULL do đó

    Mã:
    void SendMSM(PVOID Plam){//No loi o day, help me? thanks     PPARAMS pparams ; //Chỗ này bác đang cố gắng lấy handle của Edit          pparams = (PPARAMS) Plam ; //Ở đây ép kiểu ko gẫy lỗi    while(true){                           //Xong chỗ này gây lỗi vì pparams là NULL. Truy xuất trái phép vùng nhớ NULL        SendMessage(pparams->hwnd,IDC_EDIT1,(WPARAM)0,(LPARAM)"asdasdas");        Sleep(1000);    }}
    Ở đây em xin fix lại sử dụng cái API SendMessage như ý bác.
    Tớ đã thử theo ý cậu hướng dẫn xong không hiểu sao nó lại dính lỗi. Tớ tại Project khác
    thanks

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    "The SendMessage function sends the specified message to a window or windows. It calls the window procedure for the specified window and does not return until the window procedure has processed the message"
    Trích nguyên bản từ MSDN.

    1.Cái SendMessage bác truyền vô tham số thứ 2 là số hiệu thông điệp chứ ko phải ID của cửa sổ. Vì cửa sổ được đã được phân biệt bởi handle là HWND rồi.

    2.Nếu trong MFC thì bác nên tạo biến CEdit control kết nối đến TextBox là công cụ điều khiển để sau này dễ sử lý hơn.

    3.Khi đã kết nối biến điều tới control. Giả sử biến là m_wndEdit, khi đó bác chỉ cần gọi m_wndEdit.SendMessage. Đây là method đã được wrap Api bởi MFC trong đó tham số HWND đã được loại bỏ vì bản thân m_wndEdit là đối tượng chủ thể của method này.

    5.Theo giải thích của MSDN sau khi gọi SendMessage thì message sẽ được đưa vào hàng đợi chờ tới message được sử lý thì lúc đó hàm SendMessage mới thực sự kết thúc và thực hiện lệnh tiếp theo. Vì thế em ko hiểu ở đây tại sao bác lại đưa cái SendMessage vào while lặp vô tận???

    6.Ở đây em cũng không rõ bác muốn truyền cái message gì. Tuy nhiên theo em đoán thì ý định của bác ở đây là muốn đặt Text cho cái EditBox
    Để thiết lập Text cho Edit box em xin liệt kê ra một số hàm:
    a. m_wndEdit.SetWindowText(L"Hello");
    b. Dùng API SetWindowText(m_wndEdit.m_hWnd,L"Hello");
    c. Dùng hàm khác SetDlgItemTextW(HWND hwndDlg,UINT nID,LPCWSTR string); Trong đó hwndDlg là Handle của Dialog, nID là ID của TextBox và string là xâu mà bác muốn xét.

    7.Khi bác gọi tham gọi _beginthread(SendMSM,0,NULL); thì cái tham số được truyền trong hàm void SendMSM(PVOID Plam) là Plam=NULL.
    Việc gửi một thông điệp đến cửa số có Handle là NULL do đó

    Mã:
    void SendMSM(PVOID Plam){//No loi o day, help me? thanks     PPARAMS pparams ; //Chỗ này bác đang cố gắng lấy handle của Edit          pparams = (PPARAMS) Plam ; //Ở đây ép kiểu ko gẫy lỗi    while(true){                           //Xong chỗ này gây lỗi vì pparams là NULL. Truy xuất trái phép vùng nhớ NULL        SendMessage(pparams->hwnd,IDC_EDIT1,(WPARAM)0,(LPARAM)"asdasdas");        Sleep(1000);    }}
    Ở đây em xin fix lại sử dụng cái API SendMessage như ý bác.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Vì bác muốn cập nhật thông tin từ Child Dialog cho Parent Dialog nên có 2 cách thực hiện:

    1.Cách một là sử dụng Child Dialog như theo kiểu Modal bằng cách gọi phương thức DoModal():
    Cách này thường là làm với các hộp thoại kiểu Option trong ứng dụng. Lúc đó khi Child Dialog được hiện thị, thì người dùng chỉ được phép tương tác trực tiếp chuột và bàn phím với Dialog này


    2.Cách khác là sử dụng Child Dialog theo kiểu Modeless bằng cách gọi phương thức ShowWindow():
    Cách này thường sử dụng trong các ứng dụng vẽ, với việc chọn một màu trên Dialog chứa dải màu. Khi modeless child dialog hiển thị thì người dùng vẫn có thể tương tác trực tiếp với chuột và bàn phím với cả parent dialog


    Code em đính kèm sử dụng cách 2. Vì em nghĩ bác lấy thông tin hiển thị về WC trên một cửa sổ nhưng đồng thời lại vẫn muốn tương tác với cửa sổ còn lại nên xem chọn phương án Modeless Dialog cho bác.


    Nick em là YM: Tadius_ff10.
    Nếu bác có nhã ý có vấn gì anh em cùng trao đổi. Vì em vẫn chưa đi làm bao giờ nên chưa hề biết yêu cầu thực tế công việc ra sao. Mong bác giúp đỡ.

    Chúc bác thành công [IMG]images/smilies/2.gif[/IMG].

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    SendMessage function in MFC?

    Minh muốn làm Click vào nút OK thì hệ thống sẽ tạo 1 Thread và gửi 1 Msg tới 1 EditText mà nó bị lỗi như Project mình gửi kèm, mong các bận giúp
    thanks

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •