Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: VC++ NHấp nháy cửa sổ

  1. #1
    Ngày gia nhập
    01 2009
    Bài viết
    64

    Wink VC++ NHấp nháy cửa sổ

    Code:
    Option Explicit
    
    Private Type FLASHWINFO
    cbSize As Long
    Hwnd As Long
    dwFlags As Long
    uCount As Long
    dwTimeout As Long
    End Type
    
    Private Const FLASHW_TRAY = 2
    Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
    Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
    Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
    Private Declare Function FlashWindowEx Lib "user32" (FWInfo As FLASHWINFO) As Boolean
    
    Public Sub FlashWindow(Hwnd As Long, Optional NumberOfFlashes As Integer = 10)
    If Not APIFunctionPresent("FlashWindowEx", "user32") Then Exit Sub
    Dim bRet As Boolean
    Dim udtFWInfo As FLASHWINFO
    With udtFWInfo
    .cbSize = 20
    .Hwnd = Hwnd
    .dwFlags = FLASHW_TRAY
    .uCount = NumberOfFlashes
    .dwTimeout = 0
    End With
    bRet = FlashWindowEx(udtFWInfo)
    End Sub
    
    Private Function APIFunctionPresent(ByVal FunctionName As String, ByVal DllName As String) As Boolean
    Dim lHandle As Long
    Dim lAddr As Long
    lHandle = LoadLibrary(DllName)
    If lHandle <> 0 Then
    lAddr = GetProcAddress(lHandle, FunctionName)
    FreeLibrary lHandle
    End If
    APIFunctionPresent = (lAddr <> 0)
    End Function
    
    Private Sub Form_Load()
    FlashWindow Me.Hwnd
    End Sub
    
     
    
    ‘ > Cách 2
    
    ‘ Thêm 1 Timer Interval = 500
    
    Private Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
    
    Private Sub Timer1_Timer()
        FlashWindow Me.hwnd, True
    End Sub
    đây là đoạn code nhấp nháy cửa sổ trong VB,mình muốn chuyển sang C++ nhưng không hiểu cái
    Code:
    With udtFWInfo
    .cbSize = 20
    .Hwnd = Hwnd
    .dwFlags = FLASHW_TRAY
    .uCount = NumberOfFlashes
    .dwTimeout = 0
    End With
    nghĩa là gì

  2. #2
    Ngày gia nhập
    02 2008
    Bài viết
    4

    Hình như là cách viết ngắn gọn thay cho việc phải viết
    udtFInfo.cbSize = 20 , udtFWInfo.Hwnd = Hwnd ........
    vì thế dùng từ khóa With cho nhanh

  3. #3
    Ngày gia nhập
    01 2009
    Bài viết
    64

    Code:
    Option Explicit
    
    Private Type FLASHWINFO
    cbSize As Long
    Hwnd As Long
    dwFlags As Long
    uCount As Long
    dwTimeout As Long
    End Type
    
    Private Const FLASHW_TRAY = 2
    Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
    Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
    Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
    Private Declare Function FlashWindowEx Lib "user32" (FWInfo As FLASHWINFO) As Boolean
    
    Public Sub FlashWindow(Hwnd As Long, Optional NumberOfFlashes As Integer = 10)
    If Not APIFunctionPresent("FlashWindowEx", "user32") Then Exit Sub
    Dim bRet As Boolean
    Dim udtFWInfo As FLASHWINFO
    With udtFWInfo
    .cbSize = 20
    .Hwnd = Hwnd
    .dwFlags = FLASHW_TRAY
    .uCount = NumberOfFlashes
    .dwTimeout = 0
    End With
    bRet = FlashWindowEx(udtFWInfo)
    End Sub
    
    Private Function APIFunctionPresent(ByVal FunctionName As String, ByVal DllName As String) As Boolean
    Dim lHandle As Long
    Dim lAddr As Long
    lHandle = LoadLibrary(DllName)
    If lHandle <> 0 Then
    lAddr = GetProcAddress(lHandle, FunctionName)
    FreeLibrary lHandle
    End If
    APIFunctionPresent = (lAddr <> 0)
    End Function
    
    Private Sub Form_Load()
    FlashWindow Me.Hwnd
    End Sub
    cậu có thể chuyển sơ qua C++ hoặc nói sơ qua về thuật toán cho mình được không

  4. #4
    Ngày gia nhập
    01 2009
    Bài viết
    89

    trong MFC Dlg chẳng hạn thì chỉ cần đơn giản là gọi method FlashWindowEx trong method init dialog.
    Code:
    FlashWindowEx(FLASHW_ALL/*flag*/,3/*count*/,0/*timeout*/);
    trong Win32App viết thì:

    C++ Code:
    1.     FLASHWINFO flashInfo;
    2.     flashInfo.cbSize = sizeof(FLASHWINFO);
    3.     flashInfo.dwFlags = FLASHW_ALL;
    4.     flashInfo.dwTimeout =0;
    5.     flashInfo.uCount = 3;
    6.     flashInfo.hwnd = hWnd;
    7.     FlashWindowEx(&flashInfo);

    Đặt sau WM_CREATE message trong wndproc

  5. #5
    Ngày gia nhập
    01 2009
    Bài viết
    64

    Với MFC không rõ có phải thêm Khai báo gì không( mình chỉ thêm mỗi cái
    Code:
    BOOL CSdweweDlg::OnInitDialog()
    {
    	FlashWindowEx(FLASHW_ALL,3,0);
    	CDialog::OnInitDialog();
    
    	// Add "About..." menu item to system menu.
    
    	// IDM_ABOUTBOX must be in the system command range.
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	// Set the icon for this dialog.  The framework does this automatically
    	//  when the application's main window is not a dialog
    	SetIcon(m_hIcon, TRUE);			// Set big icon
    	SetIcon(m_hIcon, FALSE);		// Set small icon
    	
    	// TODO: Add extra initialization here
    	
    	return TRUE;  // return TRUE  unless you set the focus to a control
    }
    vậy mà có 2 lỗi
    --------------------Configuration: sdwewe - Win32 Debug--------------------
    Compiling...
    sdweweDlg.cpp
    C:\VC++\sdwewe\sdweweDlg.cpp(93) : error C2065: 'FlashWindowEx' : undeclared identifier
    C:\VC++\sdwewe\sdweweDlg.cpp(93) : error C2065: 'FLASHW_ALL' : undeclared identifier
    Error executing cl.exe.

    sdwewe.exe - 2 error(s), 0 warning(s)

  6. #6
    Ngày gia nhập
    01 2009
    Bài viết
    89

    Mặc định VC++ NHấp nháy cửa sổ

    Do bạn dùng VC++6 vì vậy bạn làm theo:

    C++ Code:
    1. BOOL CPenWidthsDlg::OnInitDialog()
    2. {
    3.    CDialog::OnInitDialog();
    4.  
    5.    // set timer to cause dialog to flash
    6.    SetTimer(1, 500, NULL);
    7.    return TRUE;  // return TRUE unless you set the focus to a control
    8. }
    9.  
    10. void CPenWidthsDlg::OnTimer(UINT_PTR nIDEvent)
    11. {
    12.    // cause the dialog to flash
    13.    FlashWindow(TRUE);
    14.    CDialog::OnTimer(nIDEvent);
    15. }

Các đề tài tương tự

  1. Sửa máy tính, cài đặt windows, phần mềm tại nhà nhanh nhất, rẻ nhất, hiệu quả nhất …
    Gửi bởi hopluccc trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 08-07-2013, 02:07 PM
  2. Trả lời: 12
    Bài viết cuối: 25-10-2012, 02:48 AM
  3. Bài tập C++ NHập mảng một chiều gồm n phần tử kết thúc nhập khi nhập một chữ cái
    Gửi bởi thienthanoze trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 15
    Bài viết cuối: 09-07-2012, 10:10 PM
  4. Bài tập C++ Viết phương trình nhập vào 1 chuỗi số.Hãy nhập vào 1 số.Đếm xem có bao nhiêu chữ số bạn vừa nhập
    Gửi bởi namtuocdn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 16-10-2011, 10:39 AM
  5. Bài tập C++ Nhập mảng 1 chiều, nếu phần tử nhập trùng nhau thì bắt nhập lại
    Gửi bởi danielh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 09-07-2011, 03:35 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn