Re: how do I get win32 messages?



Hi Andreas,
If you are looking for a way to receive Windows messages like WM_ (something) then you could try adding a 
filter to your window .i.e. before a window's message is processed by GTK+ the window's filter func. will be 
called with the message and it's params from the OS, as such. You can either process it or slip it to GTK. 
see the GTK+ Reference Manual page for gdk_window_add_filter(). One of the parameters of the filter func. is 
GdkXEvent, which is the actual native OS message I.e. GdkXEvent in Windows will be MSG datatype (of 
windows.h), while in Linux it will be XEvent (of X11) and so on.

Hope this helps!

Regards
Sundaram


________________________________
Message: 1
Date: Sun, 21 Jun 2009 16:08:26 +0200
From: Andreas Ronnquist <andreas ronnquist meritkonsult se>
Subject: how do I get win32 messages?
To: gtk-app-devel-list gnome org
Message-ID:
    <20090621160826 4e4c1c1f andreas ronnquist meritkonsult se>
Content-Type: text/plain; charset=US-ASCII

Hi!

I am developing a program that recieves messages from another program.
The Unix/linux version is done, but I have problems with the windows
version - The program sending messages is using the Windows messaging
system - and now I am searching for a way to recieve the messages in a
GTK program. As I have understood it, I could use the windows style
WinMain and the GetMessage / TranslateMessage functionality, but then I
would loose the simplicity of GTK and the gtk_main. 

So I search the web and find g_io_channel_win32_new_messages. Having
the following code gives no good results at all:


gboolean hwnd_callback(GIOChannel *source,GIOCondition
condition,gpointer data) {
    gchar *read_data=NULL;
    gsize size;
    gsize term_pos;
  
    if (condition==G_IO_IN) {
      
        if (g_io_channel_read_line(source,
        &read_data,&size,&term_pos,NULL)==G_IO_STATUS_NORMAL) { 
    if (size!=0) { g_print("read data: %s\n",read_data);
                g_free(read_data);
            }
        }
    }
          
    return TRUE;
}


/**
*
*/
void init_connection()
{
    GtkWidget *window=get_main_window();
    HWND hwnd=(HWND)(GDK_WINDOW_HWND(GTK_WIDGET(window)->window));
  
    windows_messages_channel=g_io_channel_win32_new_messages((guint)hwnd);
g_io_add_watch (windows_messages_channel,G_IO_IN,hwnd_callback,NULL); 
}


This gives some reaction, but I cannot interpret it.  Does anyone have something 
like this working? 

Thanks in advance
-- 
Andreas Ronnquist <andreas ronnquist meritkonsult se>



      


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]