免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4652 | 回复: 2
打印 上一主题 下一主题

gtk 中如何禁止一个entry的复制、剪切、粘贴 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-28 17:36 |只看该作者 |倒序浏览
10可用积分
请问GTK编程中如何禁止一个文本框(GtkEntry)的复制、剪切和粘贴操作?

多谢!

最佳答案

查看完整内容

自己定义一个基于GtkEntry的控件,然后把GtkEntryClass中的cut_clipboard,copy_clipboard,paste_clipboard置为空就可以了,下面给你一个示例。myentry.h:#ifndef _MY_ENTRY_H_#define _MY_ENTRY_H_#include #define MY_TYPE_ENTRY (my_entry_get_type ())#define MY_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ENTRY, MyEntry))#define MY_ENTRY_CLASS(klass) (G_TYPE ...

论坛徽章:
0
2 [报告]
发表于 2008-04-28 17:36 |只看该作者
自己定义一个基于GtkEntry的控件,然后把GtkEntryClass中的cut_clipboard,copy_clipboard,paste_clipboard置为空就可以了,下面给你一个示例。
myentry.h:

#ifndef _MY_ENTRY_H_
#define _MY_ENTRY_H_

#include <gtk/gtk.h>

#define MY_TYPE_ENTRY                  (my_entry_get_type ())
#define MY_ENTRY(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ENTRY, MyEntry))
#define MY_ENTRY_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), MY_TYPE_ENTRY, MyEntryClass))
#define MY_IS_ENTRY(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ENTRY))
#define MY_IS_ENTRY_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), MY_TYPE_ENTRY))
#define MY_ENTRY_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), MY_TYPE_ENTRY, MyEntryClass))

typedef struct _MyEntry {
  GtkEntry parent;
} MyEntry;

typedef struct _MyEntryClass {
  GtkEntryClass parent_class;
} MyEntryClass;

GType      my_entry_get_type                   (void) G_GNUC_CONST;

GtkWidget* my_entry_new (void);

#endif




myentry.c:


#include "myentry.h"

G_DEFINE_TYPE (MyEntry, my_entry, GTK_TYPE_ENTRY)

static void my_entry_class_init (MyEntryClass *klass)
{
  GtkEntryClass *entry_class = GTK_ENTRY_CLASS (klass);

  entry_class->cut_clipboard = NULL;
  entry_class->copy_clipboard = NULL;
  entry_class->paste_clipboard = NULL;
}

static void my_entry_init (MyEntry *entry)
{
}

GtkWidget *my_entry_new (void)
{
  return g_object_new (MY_TYPE_ENTRY, NULL);
}



main.c:

#include <stdio.h>
#include <gtk/gtk.h>

#include "myentry.h"


int
main (int argc, char **argv)
{
  GtkWidget *mainwindow;
  GtkWidget *entry;

  gtk_init(&argc, &argv);

  mainwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect (G_OBJECT (mainwindow),
                    "delete_event",
                    G_CALLBACK (gtk_main_quit),
                    NULL);

  entry = my_entry_new ();
  gtk_widget_show (entry);
  gtk_container_add (GTK_CONTAINER (mainwindow), entry);

  gtk_widget_show_all (GTK_WIDGET (mainwindow));
  gtk_main ();
  return 0;
}

论坛徽章:
0
3 [报告]
发表于 2008-05-27 09:16 |只看该作者

回复 #2 融化的冰山 的帖子

谢谢2楼的回复

如果要在Glade里做,该如何做呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP