30/09/2018, 22:59

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á

Văn Dương viết 01:11 ngày 01/10/2018

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

明玉 viết 01:07 ngày 01/10/2018

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

  • WndProc đặt đâu chả được, miễn là gọi được là dùng được, xài chung cũng được.

  • PosQuitMessage sẽ gửi sự kiện WM_QUIT, message loop của bạn sẽ dừng luôn, chưa rõ bạn muốn đạt điều gì đây?

  • Bạn có thể bật Visual Style:
    http://stackoverflow.com/questions/4308503/how-to-enable-visual-styles-without-a-manifest
    https://msdn.microsoft.com/en-us/library/windows/desktop/bb773175(v=vs.85).aspx

Văn Dương viết 01:03 ngày 01/10/2018

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.
明玉 viết 01:06 ngày 01/10/2018

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.

Văn Dương viết 01:08 ngày 01/10/2018

Chờ mình chút

Văn Dương viết 01:05 ngày 01/10/2018

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.

Bài liên quan
0