⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdkwindow-win32.c

📁 linux下电话本所依赖的一些图形库
💻 C
📖 第 1 页 / 共 5 页
字号:
    *y = rect.y;  GDK_NOTE (MISC, g_print ("gdk_window_get_root_origin: %p: +%d+%d\n",			   GDK_WINDOW_HWND (window), rect.x, rect.y));}voidgdk_window_get_frame_extents (GdkWindow    *window,                              GdkRectangle *rect){  GdkWindowObject *private;  HWND hwnd;  RECT r;  g_return_if_fail (GDK_IS_WINDOW (window));  g_return_if_fail (rect != NULL);  private = GDK_WINDOW_OBJECT (window);  rect->x = 0;  rect->y = 0;  rect->width = 1;  rect->height = 1;    if (GDK_WINDOW_DESTROYED (window))    return;  /* FIXME: window is documented to be a toplevel GdkWindow, so is it really   * necessary to walk its parent chain?   */  while (private->parent && ((GdkWindowObject*) private->parent)->parent)    private = (GdkWindowObject*) private->parent;  hwnd = GDK_WINDOW_HWND (window);  API_CALL (GetWindowRect, (hwnd, &r));  rect->x = r.left + _gdk_offset_x;  rect->y = r.top + _gdk_offset_y;  rect->width = r.right - r.left;  rect->height = r.bottom - r.top;  GDK_NOTE (MISC, g_print ("gdk_window_get_frame_extents: %p: %ldx%ld@+%ld+%ld\n",			   GDK_WINDOW_HWND (window),			   r.right - r.left, r.bottom - r.top,			   r.left, r.top));}GdkWindow*_gdk_windowing_window_get_pointer (GdkDisplay      *display,				   GdkWindow       *window,				   gint            *x,				   gint            *y,				   GdkModifierType *mask){  GdkWindow *return_val;  POINT screen_point, point;  HWND hwnd, hwndc;  BYTE kbd[256];  g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);    return_val = NULL;  GetCursorPos (&screen_point);  point = screen_point;  ScreenToClient (GDK_WINDOW_HWND (window), &point);  *x = point.x;  *y = point.y;  if (window == _gdk_parent_root)    {      *x += _gdk_offset_x;      *y += _gdk_offset_y;    }  hwnd = WindowFromPoint (screen_point);  if (hwnd != NULL)    {      gboolean done = FALSE;            while (!done)	{	  point = screen_point;	  ScreenToClient (hwnd, &point);	  hwndc = ChildWindowFromPoint (hwnd, point);	  if (hwndc == NULL)	    done = TRUE;	  else if (hwndc == hwnd)	    done = TRUE;	  else	    hwnd = hwndc;	}            return_val = gdk_window_lookup ((GdkNativeWindow) hwnd);    }  else    return_val = NULL;        GetKeyboardState (kbd);  *mask = 0;  if (kbd[VK_SHIFT] & 0x80)    *mask |= GDK_SHIFT_MASK;  if (kbd[VK_CAPITAL] & 0x80)    *mask |= GDK_LOCK_MASK;  if (kbd[VK_CONTROL] & 0x80)    *mask |= GDK_CONTROL_MASK;  if (kbd[VK_MENU] & 0x80)    *mask |= GDK_MOD1_MASK;  if (kbd[VK_LBUTTON] & 0x80)    *mask |= GDK_BUTTON1_MASK;  if (kbd[VK_MBUTTON] & 0x80)    *mask |= GDK_BUTTON2_MASK;  if (kbd[VK_RBUTTON] & 0x80)    *mask |= GDK_BUTTON3_MASK;    return return_val;}void_gdk_windowing_get_pointer (GdkDisplay       *display,			    GdkScreen       **screen,			    gint             *x,			    gint             *y,			    GdkModifierType  *mask){  GdkScreen *default_screen = gdk_display_get_default_screen (display);  GdkWindow *root_window = gdk_screen_get_root_window (default_screen);    *screen = default_screen;  _gdk_windowing_window_get_pointer (display, root_window, x, y, mask);}GdkWindow*_gdk_windowing_window_at_pointer (GdkDisplay *display,				  gint       *win_x,				  gint       *win_y){  GdkWindow *window;  POINT point, pointc;  HWND hwnd, hwndc;  RECT rect;  GetCursorPos (&pointc);  point = pointc;  hwnd = WindowFromPoint (point);  if (hwnd == NULL)    {      window = _gdk_parent_root;      *win_x = pointc.x + _gdk_offset_x;      *win_y = pointc.y + _gdk_offset_y;      return window;    }        ScreenToClient (hwnd, &point);  do {    hwndc = ChildWindowFromPoint (hwnd, point);    ClientToScreen (hwnd, &point);    ScreenToClient (hwndc, &point);  } while (hwndc != hwnd && (hwnd = hwndc, 1));  window = gdk_win32_handle_table_lookup ((GdkNativeWindow) hwnd);  if (window && (win_x || win_y))    {      GetClientRect (hwnd, &rect);      *win_x = point.x - rect.left;      *win_y = point.y - rect.top;    }  GDK_NOTE (MISC, g_print ("_gdk_windowing_window_at_pointer: +%d+%d %p%s\n",			   *win_x, *win_y,			   hwnd,			   (window == NULL ? " NULL" : "")));  return window;}GdkEventMask  gdk_window_get_events (GdkWindow *window){  g_return_val_if_fail (window != NULL, 0);  g_return_val_if_fail (GDK_IS_WINDOW (window), 0);  if (GDK_WINDOW_DESTROYED (window))    return 0;  return GDK_WINDOW_OBJECT (window)->event_mask;}void          gdk_window_set_events (GdkWindow   *window,		       GdkEventMask event_mask){  g_return_if_fail (window != NULL);  g_return_if_fail (GDK_IS_WINDOW (window));  if (GDK_WINDOW_DESTROYED (window))    return;  /* gdk_window_new() always sets the GDK_STRUCTURE_MASK, so better   * set it here, too. Not that I know or remember why it is   * necessary, will have to test some day.   */  GDK_WINDOW_OBJECT (window)->event_mask = GDK_STRUCTURE_MASK | event_mask;}voidgdk_window_shape_combine_mask (GdkWindow *window,			       GdkBitmap *mask,			       gint x, gint y){  g_return_if_fail (window != NULL);  g_return_if_fail (GDK_IS_WINDOW (window));  if (!mask)    {      GDK_NOTE (MISC, g_print ("gdk_window_shape_combine_mask: %p: none\n",			       GDK_WINDOW_HWND (window)));      SetWindowRgn (GDK_WINDOW_HWND (window), NULL, TRUE);    }  else    {      HRGN hrgn;      RECT rect;      /* Convert mask bitmap to region */      hrgn = _gdk_win32_bitmap_to_hrgn (mask);      GDK_NOTE (MISC, g_print ("gdk_window_shape_combine_mask: %p: %p\n",			       GDK_WINDOW_HWND (window),			       GDK_WINDOW_HWND (mask)));      _gdk_win32_get_adjusted_client_rect (window, &rect);      OffsetRgn (hrgn, -rect.left, -rect.top);      OffsetRgn (hrgn, x, y);      /* If this is a top-level window, add the title bar to the region */      if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_TOPLEVEL)	{	  HRGN tmp = CreateRectRgn (0, 0, rect.right - rect.left, -rect.top);	  CombineRgn (hrgn, hrgn, tmp, RGN_OR);	  DeleteObject (tmp);	}            SetWindowRgn (GDK_WINDOW_HWND (window), hrgn, TRUE);    }}voidgdk_window_set_override_redirect (GdkWindow *window,				  gboolean   override_redirect){  g_return_if_fail (window != NULL);  g_return_if_fail (GDK_IS_WINDOW (window));  g_warning ("gdk_window_set_override_redirect not implemented");}voidgdk_window_set_accept_focus (GdkWindow *window,			     gboolean accept_focus){  GdkWindowObject *private;  g_return_if_fail (window != NULL);  g_return_if_fail (GDK_IS_WINDOW (window));  private = (GdkWindowObject *)window;      accept_focus = accept_focus != FALSE;  if (private->accept_focus != accept_focus)    private->accept_focus = accept_focus;}voidgdk_window_set_focus_on_map (GdkWindow *window,			     gboolean focus_on_map){  GdkWindowObject *private;  g_return_if_fail (window != NULL);  g_return_if_fail (GDK_IS_WINDOW (window));  private = (GdkWindowObject *)window;      focus_on_map = focus_on_map != FALSE;  if (private->focus_on_map != focus_on_map)    private->focus_on_map = focus_on_map;}void          gdk_window_set_icon_list (GdkWindow *window,			  GList     *pixbufs){  GdkPixbuf *pixbuf, *big_pixbuf, *small_pixbuf;  gint big_diff, small_diff;  gint big_w, big_h, small_w, small_h;  gint w, h;  gint dw, dh, diff;  HICON small_hicon, big_hicon;  GdkWindowImplWin32 *impl;  gint i, big_i, small_i;  g_return_if_fail (GDK_IS_WINDOW (window));  if (GDK_WINDOW_DESTROYED (window))    return;  impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl);  /* ideal sizes for small and large icons */  big_w = GetSystemMetrics (SM_CXICON);  big_h = GetSystemMetrics (SM_CYICON);  small_w = GetSystemMetrics (SM_CXSMICON);  small_h = GetSystemMetrics (SM_CYSMICON);  /* find closest sized icons in the list */  big_pixbuf = NULL;  small_pixbuf = NULL;  big_diff = 0;  small_diff = 0;  i = 0;  while (pixbufs)    {      pixbuf = (GdkPixbuf*) pixbufs->data;      w = gdk_pixbuf_get_width (pixbuf);      h = gdk_pixbuf_get_height (pixbuf);      dw = ABS (w - big_w);      dh = ABS (h - big_h);      diff = dw*dw + dh*dh;      if (big_pixbuf == NULL || diff < big_diff)	{	  big_pixbuf = pixbuf;	  big_diff = diff;	  big_i = i;	}      dw = ABS(w - small_w);      dh = ABS(h - small_h);      diff = dw*dw + dh*dh;      if (small_pixbuf == NULL || diff < small_diff)	{	  small_pixbuf = pixbuf;	  small_diff = diff;	  small_i = i;	}      pixbufs = g_list_next (pixbufs);      i++;    }  /* Create the icons */  big_hicon = _gdk_win32_pixbuf_to_hicon (big_pixbuf);  small_hicon = _gdk_win32_pixbuf_to_hicon (small_pixbuf);  /* Set the icons */  SendMessage (GDK_WINDOW_HWND (window), WM_SETICON, ICON_BIG,	       (LPARAM)big_hicon);  SendMessage (GDK_WINDOW_HWND (window), WM_SETICON, ICON_SMALL,  	       (LPARAM)small_hicon);  /* Store the icons, destroying any previous icons */  if (impl->hicon_big)    GDI_CALL (DestroyIcon, (impl->hicon_big));  impl->hicon_big = big_hicon;  if (impl->hicon_small)    GDI_CALL (DestroyIcon, (impl->hicon_small));  impl->hicon_small = small_hicon;}void          gdk_window_set_icon (GdkWindow *window, 		     GdkWindow *icon_window,		     GdkPixmap *pixmap,		     GdkBitmap *mask){  g_return_if_fail (window != NULL);  g_return_if_fail (GDK_IS_WINDOW (window));  /* do nothing, use gdk_window_set_icon_list instead */}voidgdk_window_set_icon_name (GdkWindow   *window, 			  const gchar *name){  g_return_if_fail (window != NULL);  g_return_if_fail (GDK_IS_WINDOW (window));  if (GDK_WINDOW_DESTROYED (window))    return;    API_CALL (SetWindowText, (GDK_WINDOW_HWND (window), name));}GdkWindow *gdk_window_get_group (GdkWindow *window){  g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);  g_return_val_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD, NULL);  if (GDK_WINDOW_DESTROYED (window))    return NULL;    g_warning ("gdk_window_get_group not yet implemented");  return NULL;}void          gdk_window_set_group (GdkWindow *window, 		      GdkWindow *leader){  g_return_if_fail (window != NULL);  g_return_if_fail (GDK_IS_WINDOW (window));  g_return_if_fail (leader != NULL);  g_return_if_fail (GDK_IS_WINDOW (leader));  if (GDK_WINDOW_DESTROYED (window) || GDK_WINDOW_DESTROYED (leader))    return;    g_warning ("gdk_window_set_group not implemented");}voidgdk_window_set_decorations (GdkWindow      *window,			    GdkWMDecoration decorations){  LONG style, bits;  const LONG settable_bits = WS_BORDER|WS_THICKFRAME|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX;  g_return_if_fail (window != NULL);  g_return_if_fail (GDK_IS_WINDOW (window));    GDK_NOTE (MISC, g_print ("gdk_window_set_decorations: %p: %s%s%s%s%s%s%s\n",			   GDK_WINDOW_HWND (window),			   (decorations & GDK_DECOR_ALL ? "ALL " : ""),			   (decorations & GDK_DECOR_BORDER ? "BORDER " : ""),			   (decorations & GDK_DECOR_RESIZEH ? "RESIZEH " : ""),			   (decorations & GDK_DECOR_TITLE ? "TITLE " : ""),			   (decorations & GDK_DECOR_MENU ? "MENU " : ""),			   (decorations & GDK_DECOR_MINIMIZE ? "MINIMIZE " : ""),			   (decorations & GDK_DECOR_MAXIMIZE ? "MAXIMIZE " : "")));  style = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE);  bits = 0;  if (decorations & GDK_DECOR_BORDER)    bits |= WS_BORDER;  if (decorations & GDK_DECOR_RESIZEH)    bits |= WS_THICKFRAME;  if (decorations & GDK_DECOR_TITLE)    bits |= WS_CAPTION;  if (decorations & GDK_DECOR_MENU)    bits |= WS_SYSMENU;  if (decorations & GDK_DECOR_MINIMIZE)    bits |= WS_MINIMIZEBOX;  if (decorations & GDK_DECOR_MAXIMIZE)    bits |= WS_MAXIMIZEBOX;  if (decorations & GDK_DECOR_ALL)    style |= settable_bits, style &= ~bits;  else    style &= ~settable_bits, style |= bits;    SetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE, style);  SetWindowPos (GDK_WINDOW_HWND (window), NULL, 0, 0, 0, 0,		SWP_FRAMECHANGED | SWP_NOACTIVATE | SWP_NOMOVE |		SWP_NOREPOSITION | SWP_NOSIZE | SWP_NOZORDER);}gbooleangdk_window_get_decorations(GdkWindow       *window,			   GdkWMDecoration *decorations){  LONG style = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE);  *decorations = 0;  if (style & WS_BORDER)    *decorations |= GDK_DECOR_BORDER;  if (style & WS_THICKFRAME)    *decorations |= GDK_DECOR_RESIZEH;  if (style & WS_CAPTION)    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -