code: def _set_cfunctions(self):
          
  
          void = ctypes.c_void_p
          pointer = ctypes.POINTER
  
          self._cfactory(
              attr=self.user32, func="GetSystemMetrics", argtypes=[INT], restype=INT
          )
          self._cfactory(
              attr=self.user32,
              func="EnumDisplayMonitors",
              argtypes=[HDC, void, self.monitorenumproc, LPARAM],
              restype=BOOL,
          )
          self._cfactory(
              attr=self.user32, func="GetWindowDC", argtypes=[HWND], restype=HDC
          )
  
          self._cfactory(
              attr=self.gdi32, func="GetDeviceCaps", argtypes=[HWND, INT], restype=INT
          )
          self._cfactory(
              attr=self.gdi32, func="CreateCompatibleDC", argtypes=[HDC], restype=HDC
          )
          self._cfactory(
              attr=self.gdi32,
              func="CreateCompatibleBitmap",
              argtypes=[HDC, INT, INT],
              restype=HBITMAP,
          )
          self._cfactory(
              attr=self.gdi32,
              func="SelectObject",
              argtypes=[HDC, HGDIOBJ],
              restype=HGDIOBJ,
          )
          self._cfactory(
              attr=self.gdi32,
              func="BitBlt",
              argtypes=[HDC, INT, INT, INT, INT, HDC, INT, INT, DWORD],
              restype=BOOL,
          )
          self._cfactory(
              attr=self.gdi32, func="DeleteObject", argtypes=[HGDIOBJ], restype=INT
          )
          self._cfactory(
              attr=self.gdi32,
              func="GetDIBits",
              argtypes=[HDC, HBITMAP, UINT, UINT, void, pointer(BITMAPINFO), UINT],
              restype=BOOL,
          )
docs: Set all ctypes functions and attach them to attributes.