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

Đề tài: Lập trình Visual C++ | Cách tạo cửa sổ trong suốt?

  1. #1
    Ngày gia nhập
    01 2007
    Nơi ở
    Hải Phòng
    Bài viết
    210

    Post Lập trình Visual C++ | Cách tạo cửa sổ trong suốt?

    Tui theo lời dạy của MSDN và xài hàm SetLayerWindowAttributes để làm cửa sổ trong suốt. Nhưng trong đó nó bảo là phải xài CreateWindowEx với tham số WS_EX_LAYERED. Nhưng khổ thay, mình cho tham số đó vào thì nó bảo là không hểu WS_EX_LAYERED là cái gì ! Vô winuser.h cũng ko search thấy cái này. Vào MSDN cũng ko có cái này. Vậy cái này ở đâu ra vậy ta ? Mong các bạn chỉ giáo.
    Nếu các bạn nào có cách khác hay hơn để tạo cửa sổ trong suốt cũng mong cỉ giáo ! Thanks !

  2. #2
    Ngày gia nhập
    11 2006
    Bài viết
    75

    This may result from the obsolete C header file "winuser.h" of VC6.0++ (released in 1998 but this trick is only available for Win2k/XP)

    C++ Code:
    1. //Enviroment: Dev-C++ (4.9.9.2)
    2. #define WINVER 0x0500 //let the compiler know that OS is win2k and later
    3. #include <windows.h>
    4. //if you still face this problem, you can:
    5. //#define WS_EX_LAYERED 0x80000 (if not exist)
    6. //#define LWA_COLORKEY  0x01 (if not exist)
    7. //#define LWA_ALPHA 0x02 (if not exist)
    8. //Using LoadLibrary, GetProcAddress & FreeLibrary to load the required WINAPI function "SetLayerWindowAttributes" (located in user32.dll)
    9.  
    10. //Windows 2000/XP: Creates a layered window.
    11. //Note that this cannot be used for child windows.
    12. //Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC. (MSDN)
    13.  
    14. int WINAPI WinMain (HINSTANCE hThisInstance,
    15.                     HINSTANCE hPrevInstance,
    16.                     LPSTR lpszCmdLine,
    17.                     int nCmdShow)
    18. {
    19. ...
    20. hwnd = CreateWindowEx (
    21.            WS_EX_LAYERED,       /* Extended possibilites for variation */
    22.            szClassName,         /* Classname */
    23.            "Windows App",       /* Title Text */
    24.            WS_OVERLAPPEDWINDOW, /* default window */
    25.            CW_USEDEFAULT,       /* Windows decides the position */
    26.            CW_USEDEFAULT,       /* where the window ends up on the screen */
    27.            544,                 /* The programs width */
    28.            375,                 /* and height in pixels */
    29.            HWND_DESKTOP,        /* The window is a child-window to desktop */
    30.            NULL,                /* No menu */
    31.            hThisInstance,       /* Program Instance handler */
    32.            NULL                 /* No Window Creation data */
    33.            );
    34. ....
    35. }
    36.  
    37. LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    38. {
    39.     switch (message)                  /* handle the messages */
    40.     {
    41.         case WM_CREATE:
    42.             SetLayeredWindowAttributes(hwnd, COLOR_BTNFACE, (255 * 70) / 100, LWA_ALPHA);//70% transparent
    43.             break;
    44.         case WM_DESTROY:
    45.             PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
    46.             break;
    47.         default:                      /* for messages that we don't deal with */
    48.             return DefWindowProc (hwnd, message, wParam, lParam);
    49.     }
    50.  
    51.     return 0;
    52. }
    Đã được chỉnh sửa lần cuối bởi ilovecplusplus : 14-01-2007 lúc 10:46 PM.
    Our dreams are young and we both know they take us where we want to go...

  3. #3
    Ngày gia nhập
    01 2007
    Nơi ở
    Hải Phòng
    Bài viết
    210

    Thank you nha ! Tớ làm thành công rồi. Thực ra tớ cũng đã tìm kiếm trên mạng cái này nhiều rồi, nhưng đều tất bại. Mấu chốt là cái :
    #define WINVER 0x0500 //let the compiler know that OS is win2k and later

    Những cái tớ tìm trên mạng thì ko có cái ày nên ko xài được. May mà có cậu.
    Tuy nhiên cái
    //Using LoadLibrary, GetProcAddress & FreeLibrary to load the required WINAPI function "SetLayerWindowAttributes" (located in user32.dll)
    thì tớ lại nhờ cái tìm trên mạng, vì cái này cậu nói chung chung quá.
    Rút cục thì cũng thành công. Mừng quá ! He he !

    Nhưng
    //Note that this cannot be used for child windows.
    thì hơi bị buồn đó. Bạn có làm được ko ?

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

  1. [Hỏi] Hàm performStep() của Visual C# 2005 trong Visual C# 2008
    Gửi bởi thangnhokpro trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 8
    Bài viết cuối: 29-11-2012, 07:45 AM
  2. Lỗi Visual Studio 2010 không tạo project được trong Visual C++
    Gửi bởi lekhanhduy_lkd trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 7
    Bài viết cuối: 21-02-2012, 10:39 PM
  3. Add XML vào tool box trong visual 2010 như trong Visual 2008
    Gửi bởi anhlavip_10a4 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 18-12-2011, 02:40 PM
  4. Lập trình C++ operator>> trong visual c++ <visual 2010>
    Gửi bởi lenguyenthanh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 01-07-2010, 08:48 AM
  5. Cách sử dụng Visual C# trong bộ Visual Studio 2005
    Gửi bởi svcntt trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 18-07-2009, 10:44 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