Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Giúp đỡ WM_GETTEXT

  1. #1
    Ngày gia nhập
    07 2008
    Bài viết
    27

    Question Giúp đỡ WM_GETTEXT

    Em không biết làm thế nào để SendMessage WM_GETTEXT và nhận giá trị trả về.
    Em có làm như sau nhưng không được:
    char *text = "";
    SendMessage(this->hwnd, WM_GETTEXT, -1, (LPARAM)text);
    return (LPCWSTR)text;
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Thứ nhất là cậu không hiểu rõ bản chất của vấn đề :
    C++ Code:
    1. SendMessage(this->hwnd, WM_GETTEXT, -1, (LPARAM)text);

    Property nguyên mẫu của hàm này là :
    C++ Code:
    1. lResult = SendMessage(      // returns LRESULT in lResult     (HWND)
    2. hWndControl,      // handle to destination control     (UINT)
    3. WM_GETTEXT,      // message ID    
    4. (WPARAM) wParam,      // = (WPARAM) () wParam;  
    5. (LPARAM) lParam      // = (LPARAM) () lParam;
    6. );
    với Parameters :
    wParam
    Specifies the maximum number of TCHARs to be copied, including the terminating null character.
    Windows NT/2000/XP:ANSI applications may have the string in the buffer reduced in size (to a minimum of half that of the wParam value) due to conversion from ANSI to Unicode.

    lParam
    Pointer to the buffer that is to receive the text.

    Vậy khi cậu truyền vào chính hwnd của chương trình của cậu cậu sẽ nhận được gì ?
    Hàm này người ta thường dùng để Get text từ 1 control nào đó chứ không ai làm như cậu. Đây là cậu truyền vào bừa bãi .

    Thứ 2 là tham số wParam cậu truyền vào -1 thì sẽ nhận được gì , cậu đọc lại ở trên đi?

  3. #3
    Ngày gia nhập
    07 2008
    Bài viết
    27

    Thế bây giờ phải làm như thế nào

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hà nội
    Bài viết
    204

    Bạn này xem ra lập trình C còn chưa vững nhỉ !!

    char *text = ""; --> dòng này khai báo 1 con trỏ char trỏ đến xâu "", xâu này ko có nội dung gì cả, nên độ dài được cấp phát ngay từ đầu cho nó là 1 (có mỗi kí tự null). WM_GETTEXT sẽ trả kết quả vào xâu này, nhưng nó chỉ được cấp phát cho 1 byte thì chứa được cái gì đây.

    SendMessage(this->hwnd, WM_GETTEXT, -1, (LPARAM)text); ->> tham số wParam là độ dài lớn nhất được cấp phát cho xâu, sao lại phang cái -1 vào ??

    Phải thế này này:

    char text[255]; //khai báo xâu được cấp phát cho 255 byte, cứ cho 1 số kha khá vào vì chưa biết độ dài của xâu được trả về là bao nhiêu
    SendMessage(this->hwnd, WM_GETTEXT, 255, (LPARAM)text);

    Gửi message này đến this->hwnd thì sẽ nhận được caption (tiêu đề) nếu là this cửa sổ, nội dung của text box nếu là textbox
    Đã được chỉnh sửa lần cuối bởi hoanglinh9466 : 28-07-2008 lúc 11:48 AM.
    Life:\> dir

  5. #5
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Để ý cái number of TCHARs, coi chừng build trên UNICODE crash cái đùng đấy.
    Dùng _countof.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Các đề tài tương tự

  1. Sự cố Nhờ mod chuyển giúp bài "Sắp xếp số thứ tự ngay trong bảng của 1 database?" từ MySQL sang MSSQL giúp!
    Gửi bởi hu-xeko trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 1
    Bài viết cuối: 12-03-2012, 07:48 PM
  2. Trả lời: 4
    Bài viết cuối: 03-12-2011, 05:02 PM
  3. Mới nhập môn khó quá , cần trợ giúp [Vấn đề của bạn cần muốn giúp là gì ?]
    Gửi bởi cuingo212 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 22-10-2011, 08:43 AM
  4. Chương trình giúp một học sinh cấp 1 học phép nhân, xử lý hàm rand, giúp mình với?
    Gửi bởi chankx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-05-2009, 08:52 PM

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