Thread: WS_TABSTOP is not working

  1. #1
    Reverse Engineer maxorator's Avatar
    Join Date
    Aug 2005
    Location
    Estonia
    Posts
    2,318

    WS_TABSTOP is not working

    Code:
    #include <windows.h>
    #define GET_DATA 51112
    #define SET_DATA 51113
    
    /*  Declare Windows procedure  */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    HWND hwnddata,hwndget,hwndset;
    
    /*  Make the class name into a global variable  */
    char szClassName[ ] = "WindowsApp";
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,
                        int nFunsterStil)
    
    {
        HWND hwnd;               /* This is the handle for our window */
        MSG messages;            /* Here messages to the application are saved */
        WNDCLASSEX wincl;        /* Data structure for the windowclass */
    
        /* The Window structure */
        wincl.hInstance = hThisInstance;
        wincl.lpszClassName = szClassName;
        wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
        wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
        wincl.cbSize = sizeof (WNDCLASSEX);
    
        /* Use default icon and mouse-pointer */
        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = NULL;                 /* No menu */
        wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
        wincl.cbWndExtra = 0;                      /* structure or the window instance */
        /* Use Windows's default color as the background of the window */
        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    
        /* Register the window class, and if it fails quit the program */
        if (!RegisterClassEx (&wincl))
            return 0;
    
        /* The class is registered, let's create the program*/
        hwnd = CreateWindowEx (
               0,                   /* Extended possibilites for variation */
               szClassName,         /* Classname */
               "Clipboard Example",       /* Title Text */
               WS_OVERLAPPED|WS_THICKFRAME|WS_MINIMIZEBOX|WS_SYSMENU, /* default window */
               CW_USEDEFAULT,       /* Windows decides the position */
               CW_USEDEFAULT,       /* where the window ends up on the screen */
               294,                 /* The programs width */
               50,                 /* and height in pixels */
               HWND_DESKTOP,        /* The window is a child-window to desktop */
               NULL,                /* No menu */
               hThisInstance,       /* Program Instance handler */
               NULL                 /* No Window Creation data */
               );
    
        /* Make the window visible on the screen */
        ShowWindow (hwnd, nFunsterStil);
    
        /* Run the message loop. It will run until GetMessage() returns 0 */
        while (GetMessage (&messages, NULL, 0, 0))
        {
            /* Translate virtual-key messages into character messages */
            TranslateMessage(&messages);
            /* Send message to WindowProcedure */
            DispatchMessage(&messages);
        }
    
        /* The program return-value is 0 - The value that PostQuitMessage() gave */
        return messages.wParam;
    }
    
    
    /*  This function is called by the Windows function DispatchMessage()  */
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)                  /* handle the messages */
        {
    		case WM_CREATE:
    			hwnddata=CreateWindowEx(0,"Edit","",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL,
    				2,2,80,20,hwnd,NULL,GetModuleHandle(NULL),NULL);
    			hwndget=CreateWindowEx(0,"Button","Get CP Data",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|BS_PUSHBUTTON,
    				84,2,100,20,hwnd,(HMENU)GET_DATA,GetModuleHandle(NULL),NULL);
    			hwndget=CreateWindowEx(0,"Button","Set CP Data",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|BS_PUSHBUTTON,
    				186,2,100,20,hwnd,(HMENU)SET_DATA,GetModuleHandle(NULL),NULL);
    			break;
    		case WM_COMMAND:
    			switch(wParam){
    				case GET_DATA:{
    					if(OpenClipboard(NULL)){
    						char * buffer = NULL;
    						HANDLE hData = GetClipboardData( CF_TEXT );
    						buffer = (char*)GlobalLock( hData );
    						GlobalUnlock(hData);
    						CloseClipboard();
    						SetWindowText(hwnddata,buffer);
    					}
    					break;
    				}
    				case SET_DATA:{
    					if(OpenClipboard(NULL)){
    						HGLOBAL clipbuffer;
    						char * buffer;
    						char source[255];
    						GetWindowText(hwnddata,source,255);
    						EmptyClipboard();
    						clipbuffer = GlobalAlloc(GMEM_DDESHARE, strlen(source)+1);
    						buffer = (char*)GlobalLock(clipbuffer);
    						strcpy(buffer, source);
    						GlobalUnlock(clipbuffer);
    						SetClipboardData(CF_TEXT,clipbuffer);
    						CloseClipboard();
    					}
    					break;
    				}
    			}
    			break;
            case WM_DESTROY:
                PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
                break;
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd, message, wParam, lParam);
        }
    
        return 0;
    }

  2. #2
    Yes, my avatar is stolen anonytmouse's Avatar
    Join Date
    Dec 2002
    Posts
    2,544
    Tabbing is provided by the dialog manager, not the Window manager. Therefore, to get tab handling, you need to call IsDialogMessage in your message loop with the hwnd of your window:
    Code:
        /* Run the message loop. It will run until GetMessage() returns 0 */
        while (GetMessage (&messages, NULL, 0, 0))
        {
            if (!IsDialogMessage(hwnd, &messages))
            {
                /* Translate virtual-key messages into character messages */
                TranslateMessage(&messages);
                /* Send message to WindowProcedure */
                DispatchMessage(&messages);
            }
        }
    I think we have discussed this before, so you might also try a board search and check the documentation for IsDialogMessage.

  3. #3
    Reverse Engineer maxorator's Avatar
    Join Date
    Aug 2005
    Location
    Estonia
    Posts
    2,318
    I searched for it on the forums, but didn't find anything useful.

    Thanks, it works.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Function not working
    By sloopy in forum C Programming
    Replies: 31
    Last Post: 11-12-2005, 08:08 PM
  2. Program Not working Right
    By raven420smoke in forum C++ Programming
    Replies: 2
    Last Post: 09-16-2005, 03:21 AM
  3. Trying to eject D drive using code, but not working... :(
    By snowfrog in forum C++ Programming
    Replies: 3
    Last Post: 05-07-2005, 07:47 PM
  4. x on upper right corner not working
    By caduardo21 in forum Windows Programming
    Replies: 1
    Last Post: 02-20-2005, 08:35 PM
  5. cygwin -> unix , my code not working properly ;(
    By CyC|OpS in forum C Programming
    Replies: 4
    Last Post: 05-18-2002, 04:08 AM