Dẫn nhập lập trình C trên Windows
Hôm nay, langman – x quyết định ngồi viết 1 tut nhằm mục đích đưa ra 1 cách tiếp cận với lập trình C trên windows, hy vọng có thể đơn giản hóa vấn đề 1 cách tốt nhất. Chắc là còn nhiều chỗ sai sót lắm, mong được các bạn giúp đỡ sửa lỗi
I. Một vài kiến thức
a. Từ khóa
Thật ra thì đây vẫn là C chỉ khác cái platform thôi.
+ Trước đây chúng ta học ngôn ngữ C với IDE là Borland C ( hoặc Turbo C ) trên nền ntvdm -> 1 sảm phẩm con trong gói sảm phẩm : MS Windows XP
+ Bây giờ chúng ta học C trên platform là windows, chúng ta sẽ tạo ra các chương trình giao tiếp trực tiếp với nhân của hệ điều hành windows chứ ko phải qua thằng ntvdm nữa.
Các bạn chú ý là platform thay đổi chứ ngôn ngữ vẫn thế ( giống như là bạn nói tiếng anh ở nước anh, tiếng anh ở nước mĩ và tiếng anh ở việt nam vậy )
Và vì thế, toàn bộ từ khóa vẫn như thế, ko có từ khóa nào mới cả.
b. Quy ước đặt tên của microsoft
Sẽ thật là khó nắm bắt, thật là hoa mắt nếu bạn ko hiểu được quy tắc đặt tên của ms. Bạn hãy để ý kĩ, chúng có quy tắc đấy, và nó như sau:
_ Tất cả các kiểu dữ liệu mở rộng của windows , tên class, tên struct, tên hằng số định sẵn đều được viết in hoa
Ví dụ :
tên kiểu dữ liệu : UINT , ATOM , HANDLE, HWND, BYTE,….
tên cấu trúc : MSG, PAINSTRUCT, WNDCLASS ,.... (đây là C nên chưa có class)
tên hằng số định sẵn : NULL, IDI_APPLICATION, CS_VREDRAW,…..
_ Tất cả các method (các hàm, các phương thức) đều được viết hoa (pascal notation).
Ví dụ :
LoadIcon(…)
LoadCursor(…)
SomeOtherName(…)
_ Tất cả các tên biến, tên đối tượng đều được viết theo camel notation : ( chữ cái đầu viết thường, còn đoạn sau thì được viết theo chuẩn của pascal)
Ví dụ:
hWnd; // cá nhân tôi thì thích đặt là hwnd hơn cho nó gọn gàng
msg;
wParam
hInstance
someOtherName
ồ, nếu bạn nắm được quy tắc này, nhìn vào các source sẽ thấy nó đỡ hoa mắt hơn rồi đó, ta đã thấy được nó đơn giản hơn 1 chút rồi !!!
Nhân tiện , nói về ms, chúng ta , người vn có lẽ nên tự hào vì đại diện cho ms tại đông nam á chính là 1 tiến sĩ hói đầu người việt nam. He he he…….
c. Handle
Đây là 1 từ rất hay gặp trong tin học, khuyên chân thành đừng có dùng google để tra nó và cũng ko nên nên tra nó làm gì, từ này ko nên dịch, x sẽ giải thích nó cho bạn ngay giờ đây, ( trình độ tiếng anh của mình hơi lùn, có gì mong được bỏ qua cho)
+ Số hiệu : xuất phát từ ý tưởng như này, trong ngành công an có rất nhiều người, có nhiều người trùng cả tên lẫn họ , nhưng mỗi đồng chí công an đều có 1 số hiệu riêng, đó là ID của mỗi người, và khi cần tra về 1 ai đó, tất nhiên là tra bằng số hiệu này rồi,..
+ File handle : đối với file , chương trình của bạn làm sao để hiểu rằng bạn đang làm việc với file nào ? nằm ở đâu ? chả lẽ mỗi lần bạn mở file để ghi thì tạo 1 biến kiểu xâu kí tự để lưu trữ đường dẫn của file à như thế quá dài dòng, loằng ngoằng.
Hệ thống có cung cấp cho chúng ta 1 file table, nó tồn tại trong ổ cứng của bạn với cái tên là FAT table. Mỗi file có 1 số hiệu riêng, và cái chúng ta dùng để định danh nên các file chính là số hiệu này.
Ví dụ dễ hiểu 1 cái table nha : (tất nhiên là trên thực tế nó lôm côm hơn nhiều như này)
Mã nguồn PHP:
Số hiệu Tên file Đường dẫn007 a.mp3 D:\\Music\\008 b.avi D:\\Setup009 a.mp3 C:\\
+ Window handle : trong màn hình chúng ta có rất nhiều cửa sổ với các cái tên khác nhau, vậy OS nắm bắt các cửa sổ này thế nào ? Mỗi cửa số có 1 số hiệu riêng, nó chính là handle của 1 cửa sổ. và OS sẽ thông qua thông số đó để hiểu từng cửa sổ
Vậy handle là 1 số nguyên, nó dùng để định danh lên 1 object cụ thể. Số này được ánh xạ qua handle table để chỉ ra đối tượng đó. Trong windows 32bit nó là 1 số nguyên 4byte
Trong các tên do ms định ra, thì từ h được viết tắt của handle
Ví dụ : HWND, HINSTANCE, hPrevInstance
d. Một số từ khó hiểu
+ WINAPI , CALLBACK : từ này đặt trước hàm main, ở 1 số tài liệu khác còn có các từ như APIENTRY, PASCAL , APIPRIVATE
Thật là khủng bố khi mà có quá nhiều từ đáng sự như thế với nhưng bạn hãy bình tĩnh, sau 1 hồi mở các file .h lên tôi tìm được mấy dòng này :
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
Chúng đều là 1, thật tuyệt vời , chúng là 1 cả thôi, google tôi thấy chúng là calling convention. Tuyệt. Vậy chúng thuộc vào nhóm compiler to compiler. Những từ này thêm vào trước tên hàm nhằm mục đích chỉ rõ cho compiler hàm này có cách tổ chức phục vụ cho việc gọi đến như thế nào....
Nói tóm lại, bạn chỉ cần biết :
_ chúng thuộc loại “compiler to compiler” và chúng đều là 1
_ Đừng viết lẫn lộn nó để tránh nguy cơ…. bị thầy giáo chém
+ LRESULT : nói 1 cách đơn giản thế này , đây chính là kiểu dữ liệu nguyên 4byte, và 1 cái nhìn đơn giản : nó là 1 số nguyên. Bạn cũng chỉ cần nhớ thế thôi,
(còn nữa)
View more random threads:
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...