Lập trình phần mềm bằng C++ APIs

Chào cả làng !

Làng mình có bác nào lập trình phần mềm bang C++ WINAPI chỉ giáo mình vài bài với.
Mình đang làm theo kiểu mỗi Form nằm trong 1 class. Và có nhiều Form.

  • Hàm xử lý sự kiện WndProc thì đặt ở đâu ? Có 1 hàm WndProc rồi các WindowClassex của mỗi Form sẽ link tới nó hay mỗi Form có 1 WndProc.

  • Mình đang để hàm WndProc chung cho các WindowClassex gọi tới. Nhưng bất kỳ một Form nào Close ( sự kiện Destroy xảy ra ) mình gọi PosQuitMessage(0) thì ứng dung thoát luôn. Có cách nào xử lý không nhỉ.

  • Có thư viện nào để tạo mấy cái control nó đẹp đẹp chút. Nhìn control mặc định thấy nó “thô thiển” quá :frowning:

Nhà mình không có ai dùng C++ để làm phần mềm sao :grin:

C++ khó quá không thích hợp làm dịch vụ nên ít người Việt quan tâm :smiley:

1 Like

Mình đang viết ứng dụng theo OOP. Mỗi Form được tạo ra trong 1 class. Trong mỗi class đó thì phải gán hàm xử lý Message cho WINCLASSEX.

  • Mình có đặt WndProc ở Main.c cho mọi class khác gọi được thì OK. Nhưng đặt riêng ở trong một nơi khác (vẫn gọi được) hoặc viết nhiều WndProc đặt trong các class và gọi thì báo lỗi.
  • Mình đang có nhiều Form. Các WINCLASSEX của Form đều gán hàm xử lý Message là WndProc. Nhưng khi bất kỳ một Form nào đó đóng Close thì WM_DESTROY được gửi làm toàn bộ ứng dụng bị thoát. Mình muốn khi Form cuối cùng hoặc Form chính Close thì mới thoát ứng dụng.

Vậy thì chắc bạn phải chia ra nhiều WndProc thôi, mỗi WndProc xử lý riêng cho sự kiện WM_CLOSE. Hoặc tìm cách nhận biết cửa sổ thông qua các parameter của WndProc rồi xử lý tương ứng trong WM_CLOSE, đừng để bị gửi WM_QUIT.
Còn vụ báo lỗi thì chịu, bạn gửi lỗi lên đây, hay bạn thử làm code mới, tái tạo lại lỗi rồi gửi lên đây xem.

Chờ mình chút :slight_smile:

Mình vừa dùng VS2015 để code còn dính cái lỗi nếu khai báo class thì có lỗi :

LNK2001: unresolved external symbol __std_terminate
LNK1120: 1 unresolved externals

mà không thông báo lỗi ở dòng nào.
Nghi ngờ do sử dụng C chứ không phải C++ mình đã chỉnh trong Option mục C/C++ Compile = C++ rồi vẫn không được.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?