透過從 CAsyncSocket 或 CSocket 衍生自訂類別,可為套接字擴充專屬功能。兩者均提供豐富的虛擬通知函式供重寫,包含:OnReceive、OnSend、OnAccept、OnConnect、OnClose。框架於關鍵網路事件發生時呼叫這些回調,讓您即時響應(如資料可讀、可寫、連線建立/斷開)。詳細用法請參閱 Windows Sockets:套接字通知 及範例程式 CHATTER、CHATSRVR。
CSocket 額外提供 OnMessagePending 虛擬函式。當套接字在同步操作期間抽取 Windows 訊息佇列時,MFC 會呼叫此函式。預設實作會檢查並派送 WM_PAINT 訊息,確保介面重繪不卡頓。開發者可重寫此函式處理特定訊息,常見應用場景:
案例:長時間網路操作中的取消機制
顯示無模式對話框等待網路作業完成,對話框含「取消」按鈕。重寫 OnMessagePending 抽取對話框相關訊息,使用者點擊「取消」即可中斷阻塞操作。
BOOL CMySocket::OnMessagePending() {
// 處理自訂訊息邏輯
// 若需保留基類預設行為(如 WM_PAINT 處理),呼叫基類版本
return CAsyncSocket::OnMessagePending(); // 或 CSocket::OnMessagePending()
}
重寫時應回傳 TRUE 或基類版本回傳值,確保訊息迴圈正常運作。