提供的代碼邏輯大體正確:創建兼容 DC → 創建位圖 → `BitBlt` 複製桌面區域 → `OpenClipboard` → `EmptyClipboard` → `SetClipboardData(CF_BITMAP, hBmp)` → `CloseClipboard`。
// 錯誤順序
SetClipboardData(CF_BITMAP, hBmp);
CloseClipboard();
DeleteObject(hBmp); // ❌ 剪貼板仍持有 hBmp,此時刪除導致剪貼板數據無效
規則:`SetClipboardData` 後,**所有權轉移給剪貼板**,**不得**手動 `DeleteObject`。系統會在剪貼板清空/關閉時自動釋放。
if (OpenClipboard()) {
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBmp); // 所有權轉移
CloseClipboard();
// 此處 **不要** DeleteObject(hBmp)
MessageBox(L"截圖已複製到剪貼板");
} else {
// 打開失敗時才需自行釋放
DeleteObject(hBmp);
}
原最佳回答「粘貼到畫圖或 Word 看看」方向正確,但未指出代碼中 `DeleteObject(hBmp)` 過早導致剪貼板數據失效的關鍵 Bug。上文提供修正代碼與完整使用指南。