回答
的問題是,它是用來顯示圖像中的GTK +沒有的GtkImage widget生成事件。
這是一個「nowindow」小部件,這意味着它是一個被動容器,用於顯示信息並且不與用戶交互。
您可以通過將圖像包裝在GtkEventBox中來修復該問題,該功能將添加事件支持。
在GTK可以使用button-pressed-event GTK控件做到這一點
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<dos.h>
int initmouse();
void showmouseptr();
void hidemouseptr();
void getmousepos(int*,int*,int*);
union REGS i, o;
main()
{
int gd = DETECT, gm, status, button, x, y, tempx, tempy;
char array[50];
initgraph(&gd,&gm,"C:\\TC\\BGI");
settextstyle(DEFAULT_FONT,0,2);
status = initmouse();
if (status == 0)
printf("Mouse support not available.\n");
else
{
showmouseptr();
getmousepos(&button,&x,&y);
tempx = x;
tempy = y;
while(!kbhit())
{
getmousepos(&button,&x,&y);
if(x == tempx && y == tempy)
{}
else
{
cleardevice();
sprintf(array,"X = %d, Y = %d",x,y);
outtext(array);
tempx = x;
tempy = y;
}
}
}
getch();
return 0;
}
int initmouse()
{
i.x.ax = 0;
int86(0X33,&i,&o);
return (o.x.ax);
}
void showmouseptr()
{
i.x.ax = 1;
int86(0X33,&i,&o);
}
void getmousepos(int *button, int *x, int *y)
{
i.x.ax = 3;
int86(0X33,&i,&o);
*button = o.x.bx;
*x = o.x.cx;
*y = o.x.dx;
}
沒有什麼「純」關於C.我不明白爲什麼它包括在約GTK問題+ 。 – unwind
我希望我可以假設你知道如何將一個事件連接到一個小部件,但如果沒有:這是我的以前的答案,演示如何做到這一點。
g_signal_connect for right mouse click?
正如你可以看到有該事件爲通過一項GdkEventButton *
(event
從現在起)。此結構具有後面的成員字段:event->x
和event->y
都是gdouble
字段。
無論如何,@unwind是正確的。正如GTK文檔所述:
GtkImage是一個「無窗口」小部件(沒有自己的GdkWindow),因此默認情況下不會接收事件。如果您想要接收圖像上的事件(如按鈕單擊),請將圖像放入GtkEventBox中,然後連接到事件框上的事件信號。
GtkImage
不是唯一「窗戶」部件,BTW。例如,GtkLabel
需要類似的方法才能處理對標籤的點擊。無論如何:More info here。
手冊頁然後繼續完整的代碼示例如何處理點擊GtkImage
小部件。只需查找標題「處理GtkImage上的按鈕按下事件」。爲完整的解釋,但這裏的代碼情況下,鏈接中斷:
static gboolean
button_press_callback (GtkWidget *event_box,
GdkEventButton *event,
gpointer data)
{
g_print ("Event box clicked at coordinates %f,%f\n",
event->x, event->y);
// Returning TRUE means we handled the event, so the signal
// emission should be stopped (don’t call any further callbacks
// that may be connected). Return FALSE to continue invoking callbacks.
return TRUE;
}
static GtkWidget*
create_image (void)
{
GtkWidget *image;
GtkWidget *event_box;
image = gtk_image_new_from_file ("myfile.png");
event_box = gtk_event_box_new();
gtk_container_add (GTK_CONTAINER (event_box), image);
g_signal_connect (G_OBJECT (event_box),
"button_press_event",
G_CALLBACK (button_press_callback),
image);
return image;
}
- 1. 在gtk滾動窗口中獲取鼠標位置
- 2. 如何在鼠標點擊時獲得鼠標位置 - Python Gtk
- 3. 如何使用C#在ASP.Net中獲取鼠標指針位置?
- 4. C#WebBrowser獲取鼠標點擊位置
- 5. 如何使用Perl在GTK窗口中點擊鼠標位置?
- 6. 在div中獲取鼠標位置?
- 7. 在事件中獲取鼠標位置
- 8. OpenGl獲取鼠標位置
- 9. 獲取鼠標位置
- 10. onMouseMove獲取鼠標位置
- 11. 使用OpenGL在SFML中獲取正確的鼠標位置
- 12. 如何在C++/OpenGL中獲取當前的鼠標位置?
- 13. 如何用irrlicht獲取鼠標位置?
- 14. 用於獲取鼠標位置
- 15. 在window.resize上獲取鼠標位置
- 16. 在畫布內獲取鼠標位置
- 17. 在Flex Panel上獲取鼠標位置
- 18. 在圖片框C中獲取鼠標單擊位置#
- 19. 的Java獲取鼠標位置
- 20. 獲取鼠標位置的QDragEnterEvent
- 21. 在WPF/C上的旋轉畫布上獲取鼠標位置#
- 22. 在鼠標放下期間獲取鼠標位置?
- 23. 根據用戶點擊的位置獲取鼠標位置
- 24. 用鼠標在圖像中獲取點的位置javascript
- 25. 在鼠標點擊獲取ms圖表中的標記位置
- 26. 使用javascript在畫布內獲取鼠標位置
- 27. 在PHP中使用Ajax鼠標位置
- 28. 獲取當前鼠標位置
- 29. 如何獲取鼠標位置
- 30. WPF從鼠標位置獲取視覺
答案編輯... –