1. Trang chủ
  2. » Công Nghệ Thông Tin

Dẫn nhập lập trình C trên Windows

8 11 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 332 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tài liệu dẫn nhập lập trình C trên Windows 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. Mời các bạn cùng tham khảo nhé!

Trang 1

Dẫn nhập vào lập trình Win32 api

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

Trang 2

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) PHP Code:

Số hiệu Tên file Đường dẫn

007 a mp3 D :\\ Music \\

008 b avi D :\\ Setup

009 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

Trang 3

#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)

^_,^

Đã được chỉnh sửa lần cuối bởi langman : 24-06-2010 lúc 09:09 AM Lý do: đính chính lại

#2

13-06-2010, 04:39 PM

peterdrew

Thành viên nhiệt tình

Ngày gia nhập: 01 2010 Nơi ở: Горячие блины Bài viết: 2,677

Trích dẫn:

Nguyên bản được gửi bởi langman

+ LRESULT : nói 1 cách đơn giản thế này , đây chính là kiểu dữ liệu 8 byte,

Tuy bài này chưa hoàn thiện, nhưng anh muốn bổ sung về vấn đề này!

Langman nói nó là một số long 8 byte thì chỉ đúng với môi trường 64 bit thôi; chứ khi mọi người (đa phần) dùng 32 bit thì LRESULT là kiểu trả về tương ứng với số nguyên 4

Trang 4

Còn vấn đề về Handle thì cũng có nhiều bàn cãi, tuy nhiên anh cũng phân tích thế này (bởi vì ngoài Handle ra còn có một cái là Instance nữa): Mỗi một cửa sổ khi được tạo ra thì nó giống như một công dân bắt đầu nhập cộng đồng; để Nhà nước quản lý được công dân này thì Công dân này phải được cấp quyền công dân thông qua Chứng minh thư; chứng minh thư là một loại thẻ mà không thể có 2 (hoặc nhiều hơn) công dân nào trùng nhau! Windows cũng vậy; nó quản lý các cửa sổ thông qua một địa chỉ (số nguyên) đã được cấp cho cửa sổ, số nguyên này để Windows nhận dạng và điều hành cửa sổ, vậy tất

cả các cửa sổ khi tạo ra đều được cấp loại địa chỉ này!

Cũng phải mở rộng cái nào được gọi là cửa sổ? Cái nào không được gọi là cửa sổ? Cửa

sổ bao giờ cũng có Handle, còn một "đối tượng" nào đó khi khởi tạo mà không có Handle thì không được gọi là cửa sổ! Vậy Label trong VB6 (hoặc Static trong MFC, ) đều không được gọi là cửa sổ; còn lại đa phần các đối tượng khác đều được coi là cửa sổ (Button, EditBox, )

Thêm một cái nữa là Instance (thể hiện): Mỗi cửa sổ được tạo ra nó lại được cung cấp một "địa chỉ" kiểu Handle để quản lý các thể hiện của mình, ví dụ như khi ta mở một chương trình (app), sau đó lại mở chương trình đó một lần nữa; như vậy cùng một chương trình (app) mà có 2 thể hiện khác nhau! Như vậy các bạn cũng cần phân biệt Handle và Instance!

Верность познается во время больших смут

#3

15-06-2010, 11:33 AM

HTT90

Thành viên nhiệt tình

Ngày gia nhập: 10 2008 Bài viết: 270

Em bổ sung thêm vào ý anh peter Định nghĩa LRESULT trong MSDN thế này

typedef LONG_PTR LRESULT

và LONG_PTR

#if defined(_WIN64)

typedef int64 LONG_PTR;

#else

typedef long LONG_PTR;

#endif

Mong sẽ nhận được các bài tút khác của langman

Trang 5

chicken

#4

23-06-2010, 08:22 PM

langman Thành viên mới

Ngày gia nhập: 06 2007 Nơi ở: C:\WINDOWS\system32\dllcache\ Bài viết: 3,505

anh pt ơi, với vs2010 và vs2008 đều là 8byte hết, e chạy os windows7 32bit mà

hôm trước, e test máy thầy giáo chạy os windows 7 64 bit, thấy int vẫn là 4byte,( trên borland và dev-C ), tuần sau đề nghị thầy giáo test hộ trên VS xem có khác ko

@HTT90 : mình ôn thi nốt tuần nữa được nghỉ hè sẽ tập trung toàn bộ sức mạnh nhỏ mọn của bản thân vào C việt

^_,^

#5

23-06-2010, 08:30 PM

peterdrew

Thành viên nhiệt tình

Ngày gia nhập: 01 2010 Nơi ở: Горячие блины Bài viết: 2,677

Ừ, vậy chắc anh mới chỉ thấy nó là 4 byte; cũng không sao mà, chú tiếp tục đi, chủ đề này

Trang 6

hay đó

Верность познается во время больших смут

#6

23-06-2010, 08:40 PM

richtran

Thành viên chính thức

Ngày gia nhập: 04 2009 Bài viết: 64

Mấy bác cho một chương trình demo thử!

#7

24-06-2010, 08:59 AM

langman Thành viên mới

Ngày gia nhập: 06 2007 Nơi ở: C:\WINDOWS\system32\dllcache\ Bài viết: 3,505

Trích dẫn:

Nguyên bản được gửi bởi peterdrew

Ừ, vậy chắc anh mới chỉ thấy nó là 4 byte; cũng không sao mà, chú tiếp tục đi, chủ đề này hay đó

a để e đính chính lại

Trích dẫn:

Nguyên bản được gửi bởi richtran

Mấy bác cho một chương trình demo thử!

nốt vụ ôn thi nầy rồi viết tiếp sẽ đưa demo lên

^_,^

Trang 7

#8

27-06-2010, 12:02 AM

langman Thành viên mới

Ngày gia nhập: 06 2007 Nơi ở: C:\WINDOWS\system32\dllcache\ Bài viết: 3,505

cám ơn anh pt, em đã check đúng như a nói, nó chỉ là 8b trong môi trường 64bit

em test máy thầy windows7 64bit và vs2010 cho chính tay e cài, lúc cài chọn 64 bit

^_,^

#9

27-06-2010, 08:47 PM

benina

Thành viên mới

Ngày gia nhập: 09 2008 Bài viết: 24

Handle: em thấy dịch là "thẻ quản" là hay nhất cho em góp lửa chút nhe

Trang 8

#10

28-07-2011, 08:54 PM

tuoitho

Thành viên mới

Ngày gia nhập: 09 2008 Nơi ở: Bắc Ninh

Bài viết: 3

hix, bài viết này cũng khá lâu rùi, nhưng mình mới học vc++ nên đọc đc bài này rất bổ ích, chủ topic có thể tiếp tục chủ đề được không?

Ngày đăng: 08/05/2021, 18:39

w