CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4
  1. #1
    Join Date
    Jun 2012
    Posts
    2

    Smile MOVEMOUSE event!

    Env: Win32 (Visual C++)

    I'm using WM_MOUSEMOVE to change a button (using STATIC with SS_BITMAP) so that when the mouse is hovering at the button it change from Default.bmp to Hover.bmp. I manage to compile and the program is running, but the button doesn't change sometime.

    Any solution and hel, will be great. Thanks.

    P.S Sorry for my bad english
    Code:
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	flashMWindow.cbSize = sizeof(flashMWindow);
    	flashMWindow.dwFlags = FLASHW_ALL;
    	flashMWindow.dwTimeout = 250;
    	flashMWindow.hwnd = hWnd;
    	flashMWindow.uCount = 4;	
    
    	static BOOL  Click, BtnConnectClick, BtnConnectHover, BtnConnectChange;
    	
    	switch (message)
    	{
    	case WM_CREATE:
    		FlashWindowEx(&flashMWindow);
    		ConnectionButton = 	CreateWindowEx (NULL, _T("STATIC"), TEXT (""),
    							WS_CHILD | WS_VISIBLE | SS_NOTIFY | SS_BITMAP,
    							10, 400, 140, 40,
    							hWnd, (HMENU) IDC_CONNECTION, GetModuleHandle(NULL), NULL) ;
    		LoadImage();
    		InvalidateRect(hWnd,NULL,true);
    		break;
    	/*
    	case WM_LBUTTONDOWN :
    		if ((LOWORD(lParam)>=10)&&(LOWORD(lParam)<=150)&&(HIWORD(lParam)>=400)&&(HIWORD(lParam)<=440))
    		{
    			BtnConnectClick = TRUE;
    		}
    		else
    		{
    			BtnConnectClick = FALSE;
    		}
            Click = TRUE ;
            InvalidateRect(hWnd,NULL,false);
    		break;
    	*/
    	case WM_MOUSEMOVE:
    		if ((LOWORD(lParam)>=10)&&(LOWORD(lParam)<=150)&&(HIWORD(lParam)>=400)&&(HIWORD(lParam)<=440))
    		{
    			BtnConnectHover = TRUE;
    		}
    		else
    		{
    			BtnConnectHover = FALSE;
    		}
    		tme.cbSize = sizeof(tme); 
            tme.dwFlags = TME_LEAVE; 
            tme.hwndTrack = hWnd; 
            TrackMouseEvent(&tme); 
    		InvalidateRect(hWnd,NULL,false);
            return 0;
    	/*
    	case WM_LBUTTONUP :
    		if (Click)
            {
    			if ((LOWORD(lParam)>=10)&&(LOWORD(lParam)<=150)&&(HIWORD(lParam)>=400)&&(HIWORD(lParam)<=440))
    			{
    				if (BtnConnectClick)
    				{
    					BtnConnectChange = 1;
    					if (Connection == Disconnect) 
    					{
    						Connection = Connect;
    					} 
    					else 
    					{
    						Connection = Disconnect;
    					}
    				}
    			}
            }
    		Click = FALSE;
    		InvalidateRect (hWnd, NULL, TRUE);
            break;
    	*/
    	case WM_COMMAND:
    		switch (LOWORD(wParam))
    		{
    			case IDC_CONNECTION:
    				if (Connection == Disconnect) 
    				{
    					Connection = Connect;
    				} 
    				else 
    				{
    					Connection = Disconnect;
    				}
    				break;
    		}
    		InvalidateRect(hWnd,NULL,false);
    		break;
    	case WM_KEYDOWN:
    		{	
    			if (wParam == VK_ESCAPE)
    			{
    				int ret = MessageBox(NULL, TEXT("Are you sure to quit?"), TEXT("Message"), MB_OKCANCEL);
    				if ( ret == IDOK)
    				{
    					SendMessage(hWnd, WM_CLOSE, 0, 0);
    				}
    			}
    		break;
    		}
    	case WM_PAINT:
    		hDC = BeginPaint(hWnd, &ps);
    		// TODO: Add any drawing code here...
    		MemDC = CreateCompatibleDC(hDC);
    		SelectObject(MemDC,bmp[0]);
    		BitBlt(hDC,0,0,800,450,MemDC,0,0,SRCCOPY);
    		DeleteDC(MemDC);
    		EndPaint(hWnd, &ps);
    		//Paint Connection Button
    		if(BtnConnectHover == FALSE)
    		{
    			if (Connection == 0)
    				{
    				cn = 1;
    				}
    			else
    				{
    				cn = 3;
    				}
    		}
    		if(BtnConnectHover == TRUE)
    		{
    			if (Connection == 0)
    			{
    				cn = 2;
    			}
    			if (Connection == 1)
    			{
    				cn = 4;
    			}
    		}
    		hDC = BeginPaint(ConnectionButton, &ps);
    		MemDC = CreateCompatibleDC(hDC);
    		SelectObject(MemDC,bmp[cn]);
    		BitBlt(hDC,0,0,140,40,MemDC,0,0,SRCCOPY);
    		DeleteDC(MemDC);
    		EndPaint(ConnectionButton, &ps);
    		break;
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    	default:
    		return DefWindowProc(hWnd, message, wParam, lParam);
    	}
    	return 0;
    }
    
    // Message handler for about box.
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	UNREFERENCED_PARAMETER(lParam);
    	switch (message)
    	{
    	case WM_INITDIALOG:
    		return (INT_PTR)TRUE;
    
    	case WM_COMMAND:
    		if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
    		{
    			EndDialog(hDlg, LOWORD(wParam));
    			return (INT_PTR)TRUE;
    		}
    		break;
    	}
    	return (INT_PTR)FALSE;
    }
    
    void LoadImage() 
    {
    	bmp[0]=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BG));
    	bmp[1]=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_DefaultConnect));
    	bmp[2]=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_HoverConnect));
    	bmp[3]=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_DefaultDisconnect));
    	bmp[4]=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_HoverDisconnect));
    }

  2. #2
    Join Date
    Nov 2002
    Location
    California
    Posts
    4,556

    Re: MOVEMOUSE event!

    You are painting on the child window (i.e., the static window) from the WM_PAINT of the parent. That's usually poor practice; the child window should do all of its own painting, in response to WM_PAINT messages sent to the child.

    In addition, you are calling BeginPaint and EndPaint twice. They should be called only once in any one WM_PAINT procedure.

    Mike

  3. #3
    Join Date
    Jun 2012
    Posts
    2

    Re: MOVEMOUSE event!

    Thx Mike, it's all done now.

    Julius

  4. #4
    Join Date
    Nov 2000
    Location
    Voronezh, Russia
    Posts
    6,620

    Re: MOVEMOUSE event!

    Quote Originally Posted by Cung2_91 View Post
    Env: Win32 (Visual C++)

    I'm using WM_MOUSEMOVE to change a button (using STATIC with SS_BITMAP)
    STM_SETIMAGE message
    Best regards,
    Igor

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured