2008-09-09 19 views
7

एक सूची दृश्य सबआईटेम (रिपोर्ट/विवरण दृश्य में) की संपूर्ण सामग्री को आकर्षित करने के लिए कस्टम-ड्रा (NM_CUSTOMDRAW) का उपयोग करते समय, यह मेरी कस्टम पेंट विधि में उसी बाएं और दाएं पैडिंग को लागू करने में सक्षम होना अच्छा होगा गैर-कस्टम-तैयार वस्तुओं के लिए स्वयं नियंत्रण द्वारा लागू किया गया।Win32 सूची-दृश्य नियंत्रण SubItem पैडिंग कस्टम-तैयार SubItems के लिए?

क्या इस पैडिंग मूल्य को प्रोग्रामेटिक रूप से पुनर्प्राप्त करने का कोई तरीका है? क्या यह किसी विशेष वर्ण ("" या "डब्ल्यू" या कुछ की चौड़ाई से संबंधित है) या क्या यह एक निश्चित मान है (बाईं ओर 6px और दाएं या 3px पर 3px) या ...?

संपादित करें: स्पष्ट करने के लिए, मैं अपने NM_CUSTOMDRAWn SubItems के लिए एक ही गद्दी जोड़ना चाहते हैं कि नियंत्रण आइटम है कि यह ड्रॉ को जोड़ता है, और मीट्रिक है कि मैं, के लिए देख रहा हूँ उदाहरण के लिए, के बीच सफेद स्थान है 2 कॉलम की शुरुआत और शब्द "स्याम देश" निम्न स्क्रीनशॉट में (नोट: MSDN से स्क्रीनशॉट मेरे सवाल समझने में सहायता मिलेगी जोड़ा):

List View in Report View

ध्यान दें कि शब्द "स्याम देश" को संरेखित किया गया है हेडर आइटम ("नस्ल") के साथ। मैं कस्टम तैयार वस्तुओं के लिए एक ही संरेखण की गारंटी देने में सक्षम होना चाहता हूं।

+0

क्या आपको कभी जवाब मिला - मुझे एक ही समस्या का सामना करना पड़ रहा है। –

उत्तर

0

मुझे लगता है कि GetSystemMetrics() यह है कि आपको देखने की आवश्यकता है। मुझे लगता है कि SM_CXEDGE और SM_CYEDGE शायद वे मान हैं जो आप चाहते हैं, लेकिन मुझे उस पर उद्धरण न दें। ;-)

+0

SM_CXEDGE और SM_CYEDGE विंडो सीमा चौड़ाई हैं। मैं एक सूची दृश्य नियंत्रण में प्रत्येक तालिका कक्ष में आंतरिक अग्रणी और पीछे की पैडिंग की तलाश में हूं जो "रिपोर्ट व्यू" मोड में है। या क्या मैं कुछ न कुछ भूल रहा हूं? –

0

केवल आपके आउटपुट को देखे बिना अनुमान लगा सकता है।

कुछ सुझाव: यदि आप DrawTextEx फ़ंक्शन का उपयोग कर रहे हैं, तो क्या आपने DT_INTERNAL et al के साथ प्रयोग किया है?

क्या आप गलती से एक खाली छवि/आइकन डाल रहे हैं।

क्लासिक स्क्रीन मोड में यह ठीक दिखता है? यदि ऐसा है तो मैं यह देखने के लिए XP थीम फ़ंक्शंस देखता हूं कि कुछ चीज चल रही है या नहीं।

पहली टिप्पणी के बाद देर संपादित करें:

मुझे आश्चर्य है अगर आयत के आकार अंतरिक्ष इतना पाठ के लिए कदम नहीं करता है (या ध्यान देने के आयत के लिए) पाठ के आसपास LVN_ENDLABELEDIT संपादन बॉक्स के लिए आवश्यक से मेल खाता है?

मुझे लगता है कि आप LVM_GETITEMRECT के परिणाम को पहले कॉलम पर LVIR_LABEL के साथ तुलना कर सकते हैं और अपनी बाएं सीमा के रूप में अंतर का उपयोग कर सकते हैं।

+0

आप कस्टम आकर्षित तो एक सूची दृश्य सब आइटम (NM_CUSTOMDRAW) तो आपको किसी NMLVCUSTOMDRAW संरचना है कि एक डीसी होता है और बाउंडिंग रेक्ट है कि पूरे "तालिका सेल" मंजिल से छत और दीवार के लिए अंतरिक्ष दीवार मिलता है। मुझे पता है कि क्या गद्दी तो मेरी सामग्री अपने कस्टम ड्रा विधि में लागू करना चाहते हैं एक –

+0

मैं NM_CUSTOMDRAW का इस्तेमाल किया है, लेकिन केवल व्यक्तिगत कोशिकाओं की पृष्ठभूमि रंग (CDDS_ITEMPREPAINT) बदलने के लिए, और यह माध्यम से गिर मुख्य proc पर LVN_GETDISPINFO को यह बताने के लिए। –

1

ListView_GetSubItemRect (LVM_GETSUBITEMTECT)

http://msdn.microsoft.com/en-us/library/ms930172.aspx

क्या प्रलेखन कहते हैं मुझे लगता है LVIR_LABEL सिर्फ रिटर्न आइटम पाठ का सीमा आयत देता है, प्रति ListView_GetItemRect के रूप में होने के बावजूद।

(यह सिर्फ मुझे निगलने लगा क्योंकि मैंने वास्तव में NM_CUSTOMDRAW के साथ खेलते समय कहीं जवाब देखा था)।

संपादित करने के बाद टिप्पणी 2:

मैं कल्पना आप NMLVCUSTOMDRAW जो अगर तुम संस्करण 6.0 उपयोग करने के लिए तैयार हैं देखा है। आरसीटीक्स्ट है मैं Win2K का उपयोग करने के बाद से नहीं होगा।

को देखते हुए क्या आप पाया है मैं ListView_GetItemRect का उपयोग कर LVIR_LABEL हो और LVIR_BOUNDS साथ तुलना और अंतर का उपयोग करने के सुझाव के लिए वापस जाना होगा।

+0

दुर्भाग्य से नहीं। यह कोशिश करने के लिए आसान था, और LVIR_BOUNDS और LVIR_LABEL द्वारा दिए गए मान समान हैं: वे दोनों, पूरे सबआइटम लौट दीवार से दीवार। –

+0

तो प्रलेखन बनाता है यह लगता Win32 तरह गलत है, तो सही है, तो। क्या मुसीबत है। –

2

उपयोग ListView हेडर संदेश HDM_GETBITMAPMARGIN ऐसा करने ListView_GetColumn() तो लिया गया myLVCOLUMN.mask जाँच

LVCOLUMN myLVCOLUMN; 
myLVCOLUMN.mask=LVCF_FMT; 
ListView_GetColumn(hwnd,nCol,&myLVCOLUMN); 

तो साथ संगत स्तंभ का स्वरूप को पुन: प्राप्त कर रहा है के लिए link text

1

रास्ता देख जब हम इसी लेबल उस स्तंभ

if(myLVCOLUMN.fmt & LVCFMT_CENTER) 
    DrawText(x,x,x,x, DT_CENTER | DT_WORD_ELLIPSIS); 
else if (myLVCOLUMN.fmt & LVCFMT_RIGHT) 
    DrawText(x,x,x,x, DT_RIGHT | DT_WORD_ELLIPSIS); 
else 
    DrawText(x,x,x,x, DT_LEFT | DT_WORD_ELLIPSIS); 
से संबंधित आकर्षित

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

  • कोई संबंधित समस्या नहीं^_^