2011-12-20 14 views
5

मैं एक ऐप पर काम कर रहा हूं जहां मैं वर्तमान माउस स्थान के बगल में एक एनएसएमएनयू "संदर्भ मेनू" दिखाना चाहता हूं। इस बिंदु पर, मुझे पता है कि संदर्भ मेनू दिखाने के लिए WebView से कमांड को कैसे ट्रिगर करना है, मुझे लगता है कि स्क्रीन पर सही प्लेसमेंट पर मेनू दिखाना प्रतीत नहीं होता है। ऐसा लगता है कि मेरे निर्देशांक जो मुझे चाहिए उससे लंबवत रूप से उलटा हुआ है। ऐसा लगता है कि इस तरह की एक साधारण समस्या है, लेकिन मैंने "सर्वोत्तम प्रथाओं" समाधान को सर्वोत्तम बनाने का प्रयास करने में काफी समय लगाया है। क्या मुझे यह पता लगाने की ज़रूरत है कि माउस किस स्क्रीन में है और मैन्युअल रूप से वाई समन्वय की गणना करता है?मैं माउस कर्सर पर एनएसएमएनयू कैसे दिखा सकता हूं?

- (IBAction)showMenu:(id)sender 
{ 
    CGEventRef ourEvent = CGEventCreate(NULL); 
    CGPoint point = CGEventGetLocation(ourEvent); 
    NSPoint wp = {0,0}; 
    wp = [self.window convertScreenToBase:point]; 
    NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y); 
    NSLog(@"Location? x= %f, y = %f", (float)wp.x, (float)wp.y); 

    NSEvent *event = [NSEvent mouseEventWithType:NSLeftMouseUp location:CGPointMake(wp.x, wp.y) modifierFlags:0 timestamp:NSTimeIntervalSince1970 windowNumber:[_window windowNumber] context:nil eventNumber:0 clickCount:0 pressure:0.1]; 

    //NSEvent *event = [NSEvent eventWithCGEvent:ourEvent]; 


    NSMenu *theMenu = [[NSMenu alloc] initWithTitle:@"Contextual Menu"]; 

    [theMenu insertItemWithTitle:@"Item 1" action:@selector(beep:) keyEquivalent:@"" atIndex:0]; 
    [theMenu insertItemWithTitle:@"Item 2" action:@selector(beep:) keyEquivalent:@"" atIndex:1]; 

    [NSMenu popUpContextMenu:theMenu withEvent:event forView:nil]; 
} 

कोई सबसे प्राकृतिक तरीका यह कर पाने के लिए मुझे नमूना कोड प्रदान करें सकते हैं:

यहाँ मेरी बहुत आसान कोड है कि करीब हो जाता है।

उत्तर

7

आप कोको के साथ क्वार्ट्ज मिश्रण कर रहे हैं। एपीआई के बीच बहुत अधिक ओवरलैप है, और यदि आप केवल एक के साथ रह सकते हैं, तो ऐसा करें। "हार्डवेयर पता" शैली के साथ (0, 0) शीर्ष पर बाईं ओर, कोको का उपयोग करता है "गणित" शैली (0, 0 के साथ समन्वय का समन्वय करता क्वार्ट्ज का उपयोग करता है: के बजाय यह करें:

NSPoint point = [NSEvent mouseLocation]; 

क्वार्ट्ज और कोको अलग समन्वय प्रणाली का उपयोग) नीचे बाईं ओर।

+0

मैंने सोचा था कि मुझे लगता है कि कोशिश की। मेरे चेहरे के ठीक सामने। धन्यवाद! – David

1

init में परिभाषित करें:

NSPoint lastClick; 

और उसके बाद:

- (void) rightMouseDown:(NSEvent *)theEvent { 
    lastClick = [self convertPoint: theEvent.locationInWindow fromView: nil]; 
    [super rightMouseDown:theEvent]; 
} 

और अपनी कार्रवाई में उपयोग यह

- (IBAction)someAction:(id)sender { 
    //Use lastCLick.x and lastClick.y 
} 
संबंधित मुद्दे