2009-12-02 19 views
5

Tôi đang sử dụng lớp CPropertySheet cho thiết kế của mình trong ứng dụng MFC, thông thường trong CPropertySheet sẽ có 4 nút mặc định..Tôi muốn ẩn/xóa nút HELP..Tôi đã thử như sau..nhưng không hoạt động/không phản hồi. .Tôi đã viết này trong lớp CPropertyPage tôi là có cách nào khác ...Làm thế nào để xóa nút Trợ giúp mặc định trong CPropertySheet trong MFC?

m_psh.dwFlags & = ~ PSH_HASHELP;

+0

Bạn có thể hiển thị cho chúng tôi mã dẫn đến CPropertySheet :: AddPage không? – Goz

Trả lời

3
// Destroy the Help button 
CButton *btnHelp; 

btnHelp = reinterpret_cast<CButton *>(GetDlgItem(IDHELP)); 
btnHelp->DestroyWindow(); 
+0

tanx 4 ur reply ... không phải là nút bình thường mà u có thể xóa bằng cách sử dụng mã hóa ở trên ... Tôi đang sử dụng CPropertySheet -its một đối tượng giữ Trang thuộc tính của bạn ... nó sẽ không hoạt động..có một cách khác – kiddo

+0

Tôi biết bạn đang sử dụng CPropertySheet và một nút là một nút. Bạn có thể thử ((CWnd *) GetDlgItem (IDHELP)) -> ShowWindow (SW_HIDE); hoặc có thể xem các mẫu khác nhau trên internet: http://www.functionx.com/visualc/articles/propsheetbtn.htm –

+0

Xin chào Priyank, giải pháp của bạn là đưa ra 'Gỡ lỗi gỡ lỗi không thành công' trong gỡ lỗi và lỗi 'Truy cập vi phạm' trong bản phát hành chế độ. Tôi thấy ở khắp mọi nơi nó làm việc cho người khác nhưng tôi .. tại sao? Điều gì có thể là sự khác biệt? – Rick2047

2

Tới tập tin cpp chính của dự án của bạn (nơi theApp được xác định).
Remove dòng này: ON_COMMAND(ID_HELP, CWinApp::OnHelp)

Aditya Palanki

+0

Điều này không ẩn hoặc cũng không xóa nút Trợ giúp. Chỉ ngắt kết nối nút khỏi chức năng xử lý của nó. Và tệ hơn ... nó loại bỏ các xử lý ở những nơi khác là bạn cần nó. – sergiol

8

Các trang bất động sản cũng có một lá cờ HASHELP mà cần phải bị xóa. Các mã sau trong constructor của tờ sở hữu nên làm việc:

// After the last AddPage() call: 
m_psh.dwFlags &= ~PSH_HASHELP; 
for(int i=0; i<GetPageCount(); ++i) 
    GetPage(i)->m_psp.dwFlags &= ~PSP_HASHELP; 

Ngoài ra, người ta cũng có thể thay đổi m_psp cờ cho mỗi trang cá nhân trước khi gọi AddPage():

m_psh.dwFlags &= ~PSH_HASHELP; 
page1.m_psp.dwFlags &= ~PSP_HASHELP; 
AddPage(&page1); 
// ... 
+1

Lưu ý sự khác biệt giữa 'PS' ** H' **' _HASHELP' và 'PS' ** P **' _HASHELP'. Tôi đã thử điều này với 'CMFCPropertySheet', mã này chỉ bật nút Trợ giúp bị vô hiệu hóa vì tôi đã nhập sai.Nhưng nó bây giờ là ẩn nút như nó được cho là. – sergiol

+0

Chỉ vì mục đích hoàn chỉnh: Nếu bạn muốn loại bỏ nút Áp dụng, chỉ cần thêm 'm_psh.dwFlags | = PSH_NOAPPLYNOW;'. Các trang không có cờ này, vì vậy không có gì để làm trên chúng. – sergiol

0

này nên hoạt động ra:

Ghi đè phương thức OnNotify của lớp bắt nguồn từ PropertySheet, viết mã sau vào nó

CWnd * hwnd = GetDlgItem (IDHELP); hwnd-> ShowWindow (SW_HIDE);

+0

Đây là biến chứng không cần thiết. – sergiol

3

http://msdn.microsoft.com/de-de/library/37k4h0bh(v=vs.80).aspx

Bạn cần phải loại bỏ các lá cờ từ bảng và tất cả các trang ...

mySheet.m_psh.dwFlags &= ~PSH_HASHELP; 
page1.m_psp.dwFlags &= ~PSP_HASHELP; 
page2.m_psp.dwFlags &= ~PSP_HASHELP; 

...

Chăm sóc sự khác biệt: m_ps h vs. m_ps p và PS H _HASHELP so với PS P _HASHELP

Các vấn đề liên quan