cuốn sách gpt4 ai đã làm

Những sự kiện nào được sử dụng để tối đa hóa/thu nhỏ?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 01:43:13 29 4
mua khóa gpt4 Nike

Hiện tại tôi chịu trách nhiệm phát triển lớp cửa sổ (C++) cho một dự án nhỏ; mục tiêu là giữ mức độ phụ thuộc ở mức tối thiểu. Việc triển khai Win32/WinAPI hoạt động như mong đợi, tuy nhiên, tôi đang gặp khó khăn khi nói đến Linux/XCB.

Tôi biết rằng tôi có thể kiểm tra thuộc tính "_NET_WM_STATE", tuy nhiên, tài liệu không chỉ định bất kỳ sự kiện nào xảy ra khi cửa sổ được phóng to hoặc thu nhỏ.Gợi ý quản lý cửa sổ mở rộng Thông số kỹ thuật dường như cũng không xác định sự kiện.

Vì vậy, làm cách nào để chặn các sự kiện tối đa hóa/giảm thiểu?

EDIT: Mã của tôi về cơ bản là như thế này, nhưng nó không hoạt động: (Không hoạt động, ý tôi là điều kiện if bên dưới không bao giờ được đáp ứng.)

// xcb_generic_event_t* tin nhắn;
// xcb_intern_atom_reply_t* wmStateMinimized;

trường hợp XCB_PROPERTY_NOTIFY: {
xcb_property_notify_event_t* dữ liệu{reinterpret_cast(msg)};
if(data->atom == wmStateMinimized->atom)
eventQueue.emplace(Event::Minimized);

} phá vỡ;

Tôi cũng đã kiểm tra nguyên tử do sự kiện này cung cấp cho tôi. Chúng khác với các nguyên tử do "wmStateMinimized" cung cấp, mặc dù các nguyên tử của "wmStateMinimized" được cung cấp bởi trình quản lý cửa sổ.

Chỉnh sửa 2: Được rồi,xcb_property_notify_event_t Cung cấp nguyên tử đã thay đổi thay vì giá trị của chính nó. Vì vậy, if sẽ trông như thế này:

if(data->atom == wmState->atom)

Phải tìm ra cách lấy lại giá trị một cách chính xác.

câu trả lời hay nhất

Vì vậy, sau 3 giờ cuối cùng tôi đã tìm ra nó. Đoạn mã giải pháp này giả định rằng bạn đã truy vấn các nguyên tử:

  • _NET_WM_STATE
  • _NET_WM_STATE_HIDDEN
  • _NET_WM_STATE_MAXIMIZED_VERT
  • _NET_WM_STATE_MAXIMIZED_HORZ

Chúng được lưu trữ trong các nguyên tử sau:

xcb_atom_t wmState;
xcb_atom_t wmStateHidden;
xcb_atom_t wmStateMaxVert;
xcb_atom_t wmStateMaxHorz;

Đoạn mã này cũng giả định rằng bạn đã chỉ định

XCB_EVENT_MASK_PROPERTY_CHANGE

Đối với windows, để thực sự nhận được thông báo về những thay đổi thuộc tính.

Vì vậy, giả sử chúng ta hiện đang ở trong vòng lặp sự kiện:

trường hợp XCB_PROPERTY_NOTIFY: {
xcb_property_notify_event_t* dữ liệu{reinterpret_cast(msg)};
if(data->atom == wmState){ // thuộc tính WM_STATE đã được thay đổi.
// Bây giờ chúng ta cần giá trị.
// Vì vậy tôi đã triển khai một hàm phụ trợ.
if(internal::getAtomValue(kết nối, cửa sổ, wmState) == wmStateHidden)
// Xử lý sự kiện tại đây:
eventQueue.emplace(Event::Minimized);
khác{
xcb_atom_t value{internal::getAtomValue(kết nối, cửa sổ, wmState)};
if((giá trị == wmStateMaxVert) || (giá trị == wmStateMaxHorz))
// Xử lý sự kiện tại đây
eventQueue.emplace(Sự kiện::Tối đa hóa);
}
}

} phá vỡ;

Hàm trợ giúp "internal::getAtomValue" hoạt động như sau:

xcb_get_property_cookie_t cookie{xcb_get_property(kết nối, sai, cửa sổ, nguyên tử, XCB_ATOM_ATOM, 0, 32)};
xcb_generic_error_t* err{nullptr};
xcb_get_property_reply_t trả lời{xcb_get_property_reply(kết nối, cookie, &err);
xcb_atom_t* value{reinterpret_cast(xcb_get_property_value(reply))};

Tôi hy vọng khái niệm về giải pháp này đã được chứng minh và đúng đắn. Dành cho mọi người có nhu cầu sử dụng XCB tham khảo bạn bè.

Tái bút: Những clip này đã bị xóa khỏi nguồn ban đầu của tôi. Nó có thể chứa lỗi chính tả.

Về C++ - sự kiện nào được sử dụng để tối đa hóa/thu nhỏ? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/37568142/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress