亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 5869 | 回復(fù): 6
打印 上一主題 下一主題

GTK 鼠標拖拽fixed內(nèi)的控件產(chǎn)生不連貫移動? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-05-16 18:25 |只看該作者 |倒序瀏覽
建立fixed控件,其中put一個eventbox控件。
想通過鼠標來移動eventbox控件。但是發(fā)現(xiàn)在移動的過程中,發(fā)現(xiàn)控件移動并不連貫,而且頻繁上,下,左,右晃動。
另外:如果通過鼠標拖拽,用move函數(shù)來移動固定的位移,就不會出現(xiàn)上述情況。
請問這兩種情況有區(qū)別么?(手抖的情況不算)。
該怎么解決?

論壇徽章:
5
技術(shù)圖書徽章
日期:2013-11-07 13:21:58技術(shù)圖書徽章
日期:2013-12-07 10:34:46技術(shù)圖書徽章
日期:2014-04-23 08:50:31雙魚座
日期:2014-09-16 09:12:34亥豬
日期:2015-01-23 13:37:49
2 [報告]
發(fā)表于 2011-05-16 23:57 |只看該作者
gtk繪制采用的是“idle”機制。gtk_widget_queue_draw等并不是真正的繪制,只是發(fā)了個消息。只有在main loop循環(huán)不忙的時候才開始真正的繪制。gtk對用戶事件(鼠標拖動,按鍵等)處理的優(yōu)先級比繪制高,這樣會使多個繪制消息的動作合并為一次繪制。這可能是你提到的“不聯(lián)慣”的原因。

然而gtk也提供了同步繪制的方法:gdk_window_process_updates,在gtk_widget_queue_draw后使用它即可。gdk_window_process_updates會完成實際的繪制工作(如果有繪制工作的話)

論壇徽章:
0
3 [報告]
發(fā)表于 2011-05-17 09:41 |只看該作者
nketc: 謝謝你的答復(fù)。
我不清楚你的方法是什么。我是用gtk_fixed_move(GTK_FIXED(fixed), widget, h_position, v_position)來實現(xiàn)控件在fixed上面移動而不是繪制的。
(也許是我不應(yīng)該用這種方法吧)

以下是關(guān)于“motion-notify-event”信號處理的部分。
                               // 取得當(dāng)前鼠標位置
                        pointer_x = em->x;   
                        pointer_y = em->y;
                        // 取得鼠標偏移量
                                                tempx = (gint)pointer_x-(gint)pointer_x_back;
                        tempy = (gint)pointer_y-(gint)pointer_y_back;
                                                // 取得當(dāng)前控件的位置
                        window_hp += tempx;
                        window_vp += tempy;
                                                // 移動控件
                        gtk_fixed_move(GTK_FIXED(fixed), eventbox_window, window_hp, window_vp);
                                                // 保留本次鼠標位置
                        pointer_x_back = pointer_x;
                        pointer_y_back = pointer_y;

如果使用gtk_fixed_move函數(shù)該怎么解決這個問題呢?有沒有更好的方法呢?
nketc, 我會把你說的方法研究一下的,謝謝

論壇徽章:
0
4 [報告]
發(fā)表于 2011-05-17 09:49 |只看該作者
另外,我把gdk_window_process_updates夾在程序里。

// 取得當(dāng)前鼠標位置
pointer_x = em->x;   
pointer_y = em->y;

// 取得鼠標偏移量
tempx = (gint)pointer_x-(gint)pointer_x_back;
tempy = (gint)pointer_y-(gint)pointer_y_back;

// 取得當(dāng)前控件的位置
window_hp += tempx;
window_vp += tempy;

// 移動控件
gtk_fixed_move(GTK_FIXED(fixed), eventbox_window, window_hp, window_vp);
gdk_window_process_updates(eventbox_window->window, TRUE);

// 保留本次鼠標位置
pointer_x_back = pointer_x;
pointer_y_back = pointer_y;

情況還是一樣,沒有變化。

論壇徽章:
0
5 [報告]
發(fā)表于 2011-06-18 09:31 |只看該作者
為什么用鼠標拖動窗口不會發(fā)生不連干的問題,而拖動控件(除窗口)就會發(fā)生不連貫的問題。

論壇徽章:
5
技術(shù)圖書徽章
日期:2013-11-07 13:21:58技術(shù)圖書徽章
日期:2013-12-07 10:34:46技術(shù)圖書徽章
日期:2014-04-23 08:50:31雙魚座
日期:2014-09-16 09:12:34亥豬
日期:2015-01-23 13:37:49
6 [報告]
發(fā)表于 2011-06-18 15:02 |只看該作者
不一個地方,拖動窗口是窗口管理實現(xiàn)的gnome是metacity,拖動空間是gtk中的。

論壇徽章:
0
7 [報告]
發(fā)表于 2011-06-20 10:05 |只看該作者
為什么,在拖動窗口的回調(diào)函數(shù)中,運行fixed內(nèi)控件的移動函數(shù)(gtk_fixed_move(GTK_FIXED(fixed), eventbox_window, window_hp, window_vp);),控件就可以平滑的移動;
而在拖動fixed中控件的回調(diào)函數(shù)中,運行fixed內(nèi)控件的移動函數(shù)(gtk_fixed_move(GTK_FIXED(fixed), eventbox_window, window_hp, window_vp);),控件卻發(fā)生不連貫的移動?

該怎么理解和解決呢?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP