1. Hiệu ứng trong suốt – Aero Glass
Trong quá trình phát triển hệ điều hành Windows, bắt đầu từ Windows Vista (tới nay là Windows 7), trong giao diện được Microsoft bổ sung thêm hiệu ứng Aero Glass giúp cho giao diện Form trong suốt như gương. Từ đó tạo làm nền tảng tạo nên nhiều chương trình ứng dụng với hiệu ứng trong suốt đẹp mắt; Số đông các phần mềm ra đời từ khoảng thời gian sau khi có Windows Vista đều áp dụng hiệu ứng này.

2. Áp dụng Aero Glass cho Windows Form
Trong lập trình Csharp thông thường khi tạo Form chúng ta không thể custom để có được hiệu ứng trong suốt, để làm được điều này chúng ta cần sử dụng một API của Windows; Cụ thể là thư viện “dwmapi.dll”. Bạn có thể dễ dàng có được giao diện Aero Glass tuyệt với vài dòng code đơn giản bên dưới. Và lưu ý đừng quên khai báo namespace System.Runtime. InteropServices; Kết quả thu được là 1 Form trong suốt hoàn toàn, không có control nào bên trong.

Đặt Form trước hình ảnh để thấy được hiệu ứng trong suốt.

3. Một số custom để có Form đẹp hơn
Chúng ta tạo thêm 4 panel trong Form và thiết lập với màu sắc như hình ảnh, khi chạy Form lên do hiệu ứng trong suốt nên những panel đó sẽ có hiệu ứng màu sắc đẹp mắt. Bạn có thể thứ với các màu khác để tạo ra các hiệu ứng khác nhau.

Một cách khác chúng ta thay đổi một số giá trị như bên dưới để giới hạn khu vực Form sẽ không áp dụng hiệu ứng trong suốt. Và tôi tin rằng các bạn hiểu được ý nghĩa của bốn giá trị đó là như thế nào.

4. Hiệu ứng Shadow cho Form không có Border
Như chúng ta thấy, với trường hợp hợp tạo 1 Form không có border thì khi chạy form lên sẽ không có hiệu ứng bóng xung quanh; trông Form “phẳng” và tất nhiên không đẹp và không “thực” cho lắm. Tới đây tôi xin chia sẽ một thủ thuật nhỏ để giúp Form có thêm hiệu ứng bóng xung quanh với vài dòng code ngắn gọn. Có thể hiệu ứng không hoàn hảo lắm nhưng phần nào cũng cải thiện đáng kể.


hay qua
minh thu rui nhung no van ko trong suot
Chào bạn!
Thời gian qua do một số trục trặc nên bây giờ mới trả lời bạn được.
Bạn đã thực hiện rồi là thực hiện như thế nào, có giống như trong bài viết không?! Vì cái này chỉ đơn giản có mấy dòng code như trên là được thôi mà, có gì bạn gửi project hoặc code lên mình xem hộ cho nhé!
Thân chào!
:D, tại mình mới bắt đầu học c# nên ko biết làm thế này đúng ko, mình tạo một project windowsforms thì có phải code trong file Form1.cs quy định giao diện nên mình điền code vào đó
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("dwmapi.dll",PreserveSig = false)]
public static extern void DwmExtendFrameIntoClientArea(
IntPtr hWnd ,MARGINS pMargins);
public class MARGINS
{
public int cxLeftWidth, cxRightWidth,
cyTopHeight, cyBottomHeight;
}
private void Form1_load(object sender,EventArgs e)
{
this.BackColor = Color.Black;
MARGINS m = new MARGINS();
m.cxLeftWidth = -10;
m.cxRightWidth = -10;
m.cyBottomHeight = -10;
m.cyTopHeight = -10;
DwmExtendFrameIntoClientArea(this.Handle, m );
}
}
}
sao lau the ban
admin oi giup minh di
mình nghĩ chổ bạn sai ở đây:private void Form1_load (….).
bạn đặt lại như sau “private void Tên form của bạn_load” là dc;
THân.
Mà bạn Vũ Anh có phải dùng windows 7 hay vista ko đó.
Chứ XP thì hem trong suốt rồi! ^^
tat nhien la win 7 rui
y ban hung la sao, ten form la Form1 chu gi nua
Mình nghĩ có thể như thế này.
Hình như hàm form load của bạn Vũ Anh là gõ lại như bên trên chứ trong prject chưa tạo tạo sự kiện Formload. Bạn nhấp đôi vào khoảng trống trên form hoặc vào list event để tạo sự kiện FormLoad sau đó điền code vào..
Mình nghĩ tốt nhất bạn gửi nguyên source lên để mọi người xem thử, như bạn viết ở trên thì như đúc trong hướng dẫn rồi, mình cũng làm theo hướng dẫn và thấy rất OK.
http://www.mediafire.com/?5kc8bghcinvxhch
Mình vừa xem bài bạn gửi, và lỗi mình dự đoán không nhầm! ^^
private void Form1_load(object sender, EventArgs e)
{
this.BackColor = Color.Black;
MARGINS m = new MARGINS();
m.cxLeftWidth = -10;
m.cxRightWidth = -10;
m.cyBottomHeight = -10;
m.cyTopHeight = -10;
DwmExtendFrameIntoClientArea(this.Handle, m);
}
Hàm này là bạn copy vô chứ không phải khởi tạo Event FormLoad sinh ra nó.
Cách khắc phục như sau:
Bạn xóa hàm trên đi -> chuyển wa chế độ design và nhấp đôi vào khoảng trống trên Form, lúc này chương trình sẽ tự sinh hàm Form_Load -> copy nội dung vào trong.
Làm tốt nhé! :D
minh thanh ong rui cam on ban rat nhiu, ma may cai nay hoc o dau the minh tim ko thay
Đã tìm ra, quá hay m/.