2010-02-22 14 views
6

कैसे बदलें I एमएफसी फीचर पैक में एक सीडीकेबलपेन के कैप्शन को रीफ्रेश कैसे करें? मैं टैब्ड दृश्य स्टूडियो शैली उदाहरण के साथ काम कर रहा हूं, और मैं टैब के लिए कैप्शन बदलना चाहता हूं।सीडीकेबलपेन कैप्शन

ये कहीं कैश किए गए प्रतीत होते हैं, जैसे कि जब मैं डिफ़ॉल्ट से बदलता हूं, तो यह ऐप का उपयोग करता है जो ऐप के पिछले भाग पर उपयोग किया जाता है। मुझे इससे संबंधित रजिस्ट्री में कुछ भी नहीं मिल रहा है।

मैं नए कैप्शन सेट करने के लिए स्ट्रिंग तालिका IDS_FILE_VIEW और IDS_CLASS_VIEW को संशोधित कर रहा हूं। मैंने सीडीकेबलपेन :: CreateEx विधि पर कदम रखा है और lpszCaption पैरामीटर में नया कैप्शन होता है, लेकिन पुराना कैप्शन अभी भी उपयोग किया जा रहा है।

नए कैप्शन लोड होने लगते हैं जब तक कि फलक छिपी न हो और फिर से दिखाया जाए। यह एक संकेत होना चाहिए, लेकिन मैं इसे समझ नहीं सकता।

यह क्यों नहीं होगा जिसे मैं CreateEx के कैप्शन के रूप में पास करता हूं ???

उत्तर

6

संक्षेप में, यह एमएफसी फीचर पैक में एक बग है - वास्तव में बीसीजी सॉफ्टवेयर लाइब्रेरी में। बग यह है कि आप गतिशील रूप से इन कैप्शन को नहीं बदल सकते हैं। उनका जवाब है "आप ऐसा क्यों करना चाहते हैं?"

डॉक्यूबल फलक में टैब्ड पैन के लिए कैप्शन रजिस्ट्री में संग्रहीत हैं। सृजन में उपयोग किए गए कैप्शन का उपयोग तब नहीं किया जाता है जब कैप्शन रजिस्ट्री में पहले से मौजूद है।

तो, पहली बार जब आप अपना आवेदन चलाते हैं, तो यह स्ट्रिंग तालिका से कैप्शन का उपयोग करेगा। उसके बाद, यह रजिस्ट्री से कैप्शन का उपयोग करता है।

AppWizard द्वारा बनाई गई सेटिंग्स का उपयोग करना, रजिस्ट्री सेटिंग्स हैं पर:

HKEY_CURRENT_USER\Software\Local AppWizard-Generated Applications\MyApp\Workspace\DockingManager-128\DockingPaneAndPaneDividers 

इस कुंजी में संग्रहीत मूल्य मूल रूप से है कि शीशे में धारावाहिक रूप हो जाता है पर डॉकिंग प्रबंधक द्वारा शुरू एक बाइनरी फ़ाइल है। सामग्री दस्तावेज नहीं हैं लेकिन आप देख सकते हैं कि कोड afxdockablepane.cpp में क्या कर रहा है।

मुझे आशा है कि इससे किसी और की मदद मिलेगी जो इस मुद्दे पर आती है।

+0

ग्रेट प्रतिक्रिया thx। मेरा जवाब 'आप ऐसा क्यों करना चाहते हैं?' ... हमम ... अंतर्राष्ट्रीयकरण (माफ करना बीसीजी ... अंग्रेजी हर जगह बोली जाती नहीं है)। हास्यास्पद। –

+0

वाह यह बहुत हास्यास्पद है। मैं उन कारणों की तलाश कर रहा था जहां हमारे जवाबों पर गलती से अनुवाद किया गया था जब तक कि मैं इस जवाब पर ठोकर नहीं लगाता। आपका बहुत बहुत धन्यवाद। – TorbenJ

2

हमम, बेबे मुझे गलत समझा, लेकिन मैं सिर्फ'ॉकविंडोटेक्स्ट 'को सीडीकेबलपेन के उदाहरण पर कॉल करता हूं। मैं इसे 'सेटविंडोटेक्स्ट' में पास करने के लिए बदलता हूं ...

+0

हां, SetWindowText काम करता है, लेकिन वास्तव में अपेक्षित नहीं है। आपको CreateWindowText को कॉल करने के कुछ समय बाद कॉल करना होगा, और यह बनाने के बाद अगला कॉल नहीं हो सकता है। उदाहरण के लिए, वीएस उदाहरण में CreateDockingWindows नामक एक फ़ंक्शन है। उस फ़ंक्शन में सेटविंडोटेक्स्ट में कॉल जोड़ना (उपयुक्त बनाएं के बाद) काम नहीं करता है। मेरी मूल पोस्ट का बिंदु यह था कि बनाएँ फ़ंक्शन एक कैप्शन पैरामीटर लेता है जिसे पूरी तरह अनदेखा किया जाता है। – cigarman

0

विंडो का नाम लोडस्टेट() समय पर क्रमबद्ध है। अपने ऐप में विंडो की स्थिति से संबंधित सभी रजिस्ट्री जानकारी हटाएं। मेरे मामले में यह HKCU \ Software \ My App Name पर था।

0

मैं एक ही समस्या का सामना करना पड़ा है, लेकिन मैं यहाँ की पेशकश की मैं आगे चला गया और पाया गया कि आप आसानी से CDockingManager की चर्चा करते हुए और यह विधि लागू द्वारा रजिस्ट्री से राज्य की लोडिंग को निष्क्रिय कर सकते समाधान के किसी भी तरह डॉन 'टी के रूप में DisableRestoreDockState

0

चूंकि टैब के लिए पाठ रजिस्ट्री के अंदर संग्रहीत किया जाता है, और ऐसा करने के लिए कोड बहुत अच्छी तरह छिपी हुई है और अनियंत्रित है, मुझे जो चाहिए वह करने का एक बुरा तरीका मिला है।

अपनी स्ट्रिंग तालिका बदलें।अपने मेनफ्रेम कक्षा में इस कॉल

STRINGTABLE 
BEGIN 
    IDS_CLASS_VIEW   "Layer View" 
    ... 
END 

जोड़ें:: तुम क्या चाहते करने के लिए आर सी फ़ाइल, उदाहरण के लिए मैं यहाँ LayerView को ClassView बदल

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
    if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1) 
     return -1; 

    BOOL bNameValid; 

    // set the visual manager and style based on persisted value 
    OnApplicationLook(theApp.m_nAppLook); 

    GetDockingManager()->DisableRestoreDockState(TRUE); // <-- THIS CALL 

इस स्टोर करेगा मतलब है कि जब आप करीब तो खोलें, आपका ऐप रजिस्ट्री में संग्रहीत नाम होगा जिसे आपने .rc फ़ाइल के अंदर रखा होगा।

अब आप अक्षम कर सकते हैं कि DisableRestoreDockState पर कॉल करें क्योंकि सही एक रजिस्ट्री में संग्रहीत है। आपके उपयोगकर्ता के कंप्यूटर में नए इंस्टॉलेशन भी काम करेंगे।

मैं अंतिम रिलीज में DisableRestoreDockState नहीं रखता क्योंकि मैं अन्य सेटिंग्स को पुनर्स्थापित करना चाहता हूं।

HTH

1

मैं इसी तरह की समस्या यह है कि आवेदन के पहले बंद होने के बाद दो शीशे में एक ही नाम मिल गया था। मैंने रजिस्ट्री कुंजियों को हटा दिया, पहली बार सब कुछ ठीक था, दूसरी बार मुझे एक ही बग मिला। सेटविंडोटेक्स्ट ("माईपेन"); ओवरराइड ऑनसाइज फलक के गंदे काम करते थे। यह विंडोज कैप्शन को सेट करने के लिए सबसे अच्छी जगह नहीं है, लेकिन जैसा कि सेटविंडोज़क्स्ट के ऊपर वर्णित कॉलमैन हमेशा के रूप में काम नहीं कर रहा है।

वैसे भी, जब आवेदन शुरू कर दिया है, फलक positing प्रक्रिया हमेशा फोन OnSize के बाद फलक के निर्माण, समाप्त हो गया है इसलिए मेरे लिए यह गंदा हैक चाल किया था।

संबंधित मुद्दे