如何在Squeak / Morphic GUI中使用鼠标滚轮

我正在使用Morphic / Squeak实现图形用户界面。有些物品有阻力和阻力。丢弃功能。在拖动时,我希望能够使用鼠标滚轮旋转这些项目。 第一个问题是使用鼠标滚轮结束拖动动作并导致掉落(尝试)。我怎样才能抑制它 - 并同时触发mouseWheelEvent? 第二个问题:如何将鼠标轮事件分配给我的变形?如上所述,此事件仅在拖动此变形时相关。 (解决了)     
已邀请:
出现在已选择支持它的VM实现上,Squeak将鼠标滚轮映射到Ctrl Up-Arrow和Ctrl-Down-Arrow键事件。例如,在sqWin32Window.c中的Win32上:
if( WM_MOUSEWHEEL == message || g_WM_MOUSEWHEEL == message ) {
    /* Record mouse wheel msgs as CTRL-Up/Down */
    short zDelta = (short) HIWORD(wParam);
    if(inputSemaphoreIndex) {
        sqKeyboardEvent *evt = (sqKeyboardEvent*) sqNextEventPut();
        evt->type = EventTypeKeyboard;
        evt->timeStamp = lastMessage->time;
        evt->charCode = (zDelta > 0) ? 30 : 31;
        evt->pressCode = EventKeyChar;
        evt->modifiers = CtrlKeyBit;
        evt->utf32Code = 0;
        evt->reserved1 = 0;
    } else {
        buttonState = 64;
        if (zDelta < 0) {
            recordVirtualKey(message,VK_DOWN,lParam);
        } else {
            recordVirtualKey(message,VK_UP,lParam);
        }
    }
    return 1;
}
所以这就是你在Squeak里面所做的事情。 (如果您使用的是Polymorph扩展,则会有一个特殊的
mouseWheel
事件,但他们所做的只是过滤Ctrl-Up和Ctrl-Down并生成“假”
MouseWheelEvent
消息。) 在
HandMorph
中查看
handleEvent
的一些代码:
evt isMouse ifTrue:[
    self sendListenEvent: evt to: self mouseListeners.
    lastMouseEvent _ evt].

    "Check for pending drag or double click operations."
    mouseClickState ifNotNil:[
        (mouseClickState handleEvent: evt from: self) ifFalse:[
        "Possibly dispatched #click: or something and will not re-establish otherwise"
        ^self mouseOverHandler processMouseOver: lastMouseEvent]].

        evt isMove ifTrue:[
            self position: evt position.
            self sendMouseEvent: evt.
        ] ifFalse:[
            "Issue a synthetic move event if we're not at the position of the event"
            (evt position = self position) ifFalse:[self moveToEvent: evt].
            "Drop submorphs on button events"
            (self hasSubmorphs) 
                ifTrue:[self dropMorphs: evt]
                ifFalse:[self sendMouseEvent: evt].
        ].
Polymorph
MouseWheelEvent
是MouseEvent的子类,它不会返回true,因此你得到了一个drop。如果你想让它发挥作用,你必须在这里改变一些东西。     
你最好的办法是找到一个像你想要的那样的变形,然后浏览它的方法,看看它是如何做到的。话虽如此,我没有遇到任何支持轮特定功能,当然原来的Xerox鼠标没有这样的功能。     

要回复问题请先登录注册