ส่งข้อความ

ฟังก์ชันเรียก sendmessage ระหว่างงานถูกใช้เพื่อส่งข้อความไปยังกระบวนงานหน้าต่างนั้น เรียก sendmessage ระหว่างงานเรียกใช้กระบวนงานหน้าต่าง และรอว่ากระบวนการประมวลผลข้อความ และส่งกลับผลลัพธ์.

ข้อความสามารถถูกส่งไปที่หน้าต่างใด ๆ ในระบบ หมายเลขอ้างอิงหน้าต่างมีทั้งหมดที่จำเป็นได้ ระบบใช้หมายเลขอ้างอิงเพื่อกำหนดกระบวนงานหน้าต่างใดควรได้รับข้อความ.

ก่อนที่จะประมวลผลข้อความที่อาจถูกส่งจากเธรดอื่น กระบวนงานหน้าต่างควรก่อนเรียกใช้ฟังก์ชันInSendMessage ถ้าฟังก์ชันนี้ส่งกลับ TRUE กระบวนการหน้าต่างควรเรียกReplyMessageก่อนที่จะมีฟังก์ชันที่ทำให้หัวข้อเพื่อควบคุม ดังที่แสดงในตัวอย่างดังต่อไปนี้.

กรณี WM_USER + 5: ถ้า (InSendMessage()) ReplyMessage(TRUE) 
 
    DialogBox (hInst, "MyDialogBox", hwndMain, MyDlgProc (DLGPROC)); 
    แบ่ง 

 

จำนวนข้อความสามารถส่งไปถึงตัวควบคุมในกล่องโต้ตอบ ข้อความเหล่านี้ควบคุมการตั้งค่าลักษณะปรากฏ ทำงาน และเนื้อหาของตัวควบคุม หรือเรียกข้อมูลเกี่ยวกับตัวควบคุม ตัวอย่างเช่น ความCB_ADDSTRINGสามารถเพิ่มสายอักขระลงในกล่องคำสั่งผสม และข้อความBM_SETCHECKสามารถตั้งค่าสถานะการตรวจสอบของกล่องกาเครื่องหมายหรือปุ่ม.

ใช้ฟังก์ชันSendDlgItemMessageเพื่อส่งข้อความไปยังตัวควบคุม การระบุรหัสของตัวควบคุมและหมายเลขอ้างอิงของหน้าต่างกล่องโต้ตอบที่ประกอบด้วยตัวควบคุม ตัวอย่างต่อไปนี้ ถ่ายจากกระบวนงานกล่องโต้ตอบ ในการคัดลอกสายจากตัวควบคุมการแก้ไขของกล่องคำสั่งผสมลงในกล่องรายการของการ ตัวอย่างใช้SendDlgItemMessageเพื่อส่งข้อความ CB_ADDSTRING กับกล่องคำสั่งผสม.

HWND hwndCombo 
int cTxtLen 
PSTR pszMem 
 
สวิตช์ (uMsg) {กรณี WM_COMMAND: สลับ (LOWORD(wParam)) {กรณี IDD_ADDCBITEM: / / ได้รับหมายเลขอ้างอิงของกล่องคำสั่งผสมและ / / ความยาวของสายอักขระในการแก้ไขการควบคุม / / ของกล่องคำสั่งผสม 
 
                hwndCombo = GetDlgItem (hwndDlg, IDD_COMBO); 
                cTxtLen = GetWindowTextLength(hwndCombo) 
 
                / / การจัดสรรหน่วยความจำสำหรับสายอักขระและคัดลอก / / สายลงในหน่วยความจำ 
 
                pszMem = (PSTR) VirtualAlloc((LPVOID) NULL, (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE); 
                GetWindowText (hwndCombo, pszMem, cTxtLen + 1); 
 
                / / เพิ่มสายอักขระลงในกล่องรายการของ / / คำสั่งผสมกล่อง และเอาออกจากสายอักขระ / / แก้ไขตัวควบคุมของกล่องคำสั่งผสม 
 
                ถ้า (* pszMem ! = NULL) { SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) (pszMem (LPSTR))); 
                    SetWindowText (hwndCombo, (LPSTR) NULL); 
                } / / ฟรีหน่วยความจำ และกลับ 
 
                VirtualFree (pszMem, 0, MEM_RELEASE); 
                ส่งกลับ TRUE 
            / / / / ประมวลผลคำสั่งกล่องโต้ตอบอื่น 
            / / } / / / / ประมวลผลข้อความกล่องโต้ตอบอื่น ๆ 
    // 
 
} 

 

Index