1#if __GLASGOW_HASKELL__ >= 709 2{-# LANGUAGE Safe #-} 3#elif __GLASGOW_HASKELL__ >= 701 4{-# LANGUAGE Trustworthy #-} 5#endif 6----------------------------------------------------------------------------- 7-- | 8-- Module : Graphics.Win32.GDI.Clip 9-- Copyright : (c) Alastair Reid, 1997-2003 10-- License : BSD-style (see the file libraries/base/LICENSE) 11-- 12-- Maintainer : Esa Ilari Vuokko <ei@vuokko.info> 13-- Stability : provisional 14-- Portability : portable 15-- 16-- A collection of FFI declarations for interfacing with Win32. 17-- 18----------------------------------------------------------------------------- 19 20module Graphics.Win32.GDI.Clip where 21 22import Control.Monad 23import Graphics.Win32.GDI.Types 24import System.Win32.Types 25import Graphics.Win32.Message ( WindowMessage ) 26 27import Foreign 28 29##include "windows_cconv.h" 30 31#undef WINVER 32#define WINVER 0x0600 33#undef _WIN32_WINNT 34#define _WIN32_WINNT 0x0600 35 36#include <windows.h> 37 38type ClipboardFormat = UINT 39 40#{enum ClipboardFormat, 41 , cF_BITMAP = CF_BITMAP 42 , cF_DIB = CF_DIB 43 , cF_DIF = CF_DIF 44 , cF_DSPBITMAP = CF_DSPBITMAP 45 , cF_DSPENHMETAFILE = CF_DSPENHMETAFILE 46 , cF_DSPMETAFILEPICT = CF_DSPMETAFILEPICT 47 , cF_DSPTEXT = CF_DSPTEXT 48 , cF_ENHMETAFILE = CF_ENHMETAFILE 49 , cF_GDIOBJFIRST = CF_GDIOBJFIRST 50 , cF_HDROP = CF_HDROP 51 , cF_LOCALE = CF_LOCALE 52 , cF_METAFILEPICT = CF_METAFILEPICT 53 , cF_OEMTEXT = CF_OEMTEXT 54 , cF_OWNERDISPLAY = CF_OWNERDISPLAY 55 , cF_PALETTE = CF_PALETTE 56 , cF_PENDATA = CF_PENDATA 57 , cF_PRIVATEFIRST = CF_PRIVATEFIRST 58 , cF_PRIVATELAST = CF_PRIVATELAST 59 , cF_RIFF = CF_RIFF 60 , cF_SYLK = CF_SYLK 61 , cF_TEXT = CF_TEXT 62 , cF_WAVE = CF_WAVE 63 , cF_TIFF = CF_TIFF 64 , cF_DIBV5 = CF_DIBV5 65 , cF_GDIOBJLAST = CF_GDIOBJLAST 66 , cF_UNICODETEXT = CF_UNICODETEXT 67 } 68 69wM_CLIPBOARDUPDATE :: WindowMessage 70wM_CLIPBOARDUPDATE = 0x031D -- #const WM_CLIPBOARDUPDATE -- Can't use constant due to GHC 7.8.x support. 71 72-- % , CF_UNICODETEXT -- WinNT only 73 74foreign import WINDOWS_CCONV unsafe "windows.h ChangeClipboardChain" 75 changeClipboardChain :: HWND -> HWND -> IO Bool 76 77closeClipboard :: IO () 78closeClipboard = 79 failIfFalse_ "CloseClipboard" c_CloseClipboard 80foreign import WINDOWS_CCONV unsafe "windows.h CloseClipboard" 81 c_CloseClipboard :: IO BOOL 82 83foreign import WINDOWS_CCONV unsafe "windows.h CountClipboardFormats" 84 countClipboardFormats :: IO Int 85 86emptyClipboard :: IO () 87emptyClipboard = 88 failIfFalse_ "EmptyClipboard" c_EmptyClipboard 89foreign import WINDOWS_CCONV unsafe "windows.h EmptyClipboard" 90 c_EmptyClipboard :: IO BOOL 91 92-- original also tested GetLastError() != NO_ERROR 93 94enumClipboardFormats :: ClipboardFormat -> IO ClipboardFormat 95enumClipboardFormats format = do 96 format' <- c_EnumClipboardFormats format 97 when (format' == 0) $ 98 failUnlessSuccess "EnumClipboardFormats" getLastError 99 return format' 100foreign import WINDOWS_CCONV unsafe "windows.h EnumClipboardFormats" 101 c_EnumClipboardFormats :: ClipboardFormat -> IO ClipboardFormat 102 103getClipboardData :: ClipboardFormat -> IO HANDLE 104getClipboardData format = 105 failIfNull "GetClipboardData" $ c_GetClipboardData format 106foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardData" 107 c_GetClipboardData :: ClipboardFormat -> IO HANDLE 108 109getClipboardFormatName :: ClipboardFormat -> IO String 110getClipboardFormatName format = 111 allocaArray 256 $ \ c_name -> do 112 len <- failIfZero "GetClipboardFormatName" $ 113 c_GetClipboardFormatName format c_name 256 114 peekTStringLen (c_name, len) 115foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardFormatNameW" 116 c_GetClipboardFormatName :: ClipboardFormat -> LPTSTR -> Int -> IO Int 117 118getClipboardOwner :: IO HWND 119getClipboardOwner = 120 failIfNull "GetClipboardOwner" c_GetClipboardOwner 121foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardOwner" 122 c_GetClipboardOwner :: IO HWND 123 124getClipboardViewer :: IO HWND 125getClipboardViewer = 126 failIfNull "GetClipboardViewer" c_GetClipboardViewer 127foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardViewer" 128 c_GetClipboardViewer :: IO HWND 129 130getOpenClipboardWindow :: IO HWND 131getOpenClipboardWindow = 132 failIfNull "GetClipboardWindow" c_GetOpenClipboardWindow 133foreign import WINDOWS_CCONV unsafe "windows.h GetOpenClipboardWindow" 134 c_GetOpenClipboardWindow :: IO HWND 135 136getPriorityClipboardFormat :: [ClipboardFormat] -> IO Int 137getPriorityClipboardFormat formats = 138 withArray formats $ \ format_array -> 139 failIf (== -1) "GetPriorityClipboardFormat" $ 140 c_GetPriorityClipboardFormat format_array (length formats) 141foreign import WINDOWS_CCONV unsafe "windows.h GetPriorityClipboardFormat" 142 c_GetPriorityClipboardFormat :: Ptr UINT -> Int -> IO Int 143 144foreign import WINDOWS_CCONV unsafe "windows.h IsClipboardFormatAvailable" 145 isClipboardFormatAvailable :: ClipboardFormat -> IO BOOL 146 147openClipboard :: HWND -> IO () 148openClipboard wnd = 149 failIfFalse_ "OpenClipboard" $ c_OpenClipboard wnd 150foreign import WINDOWS_CCONV unsafe "windows.h OpenClipboard" 151 c_OpenClipboard :: HWND -> IO BOOL 152 153registerClipboardFormat :: String -> IO ClipboardFormat 154registerClipboardFormat name = 155 withTString name $ \ c_name -> 156 failIfZero "RegisterClipboardFormat" $ 157 c_RegisterClipboardFormat c_name 158foreign import WINDOWS_CCONV unsafe "windows.h RegisterClipboardFormatW" 159 c_RegisterClipboardFormat :: LPCTSTR -> IO ClipboardFormat 160 161setClipboardData :: ClipboardFormat -> HANDLE -> IO HANDLE 162setClipboardData format mem = 163 failIfNull "SetClipboardData" $ c_SetClipboardData format mem 164foreign import WINDOWS_CCONV unsafe "windows.h SetClipboardData" 165 c_SetClipboardData :: ClipboardFormat -> HANDLE -> IO HANDLE 166 167setClipboardViewer :: HWND -> IO HWND 168setClipboardViewer wnd = 169 failIfNull "SetClipboardViewer" $ c_SetClipboardViewer wnd 170foreign import WINDOWS_CCONV unsafe "windows.h SetClipboardViewer" 171 c_SetClipboardViewer :: HWND -> IO HWND 172