در اين بخش مي خواهيم شما را با چگونگي كار با محتواي ابزار در Visual C++6 آشنا كنيم.محتواي ابزار يا (DC) يكي از پيچيده ترين ابزارها در Visual C++6ميباشد كه به وسيله اين ابزار مي توانيد اشياء را بطور واسطه با گرافيك يا بدون آن در برنامه هاي خود خلق كنيد. قبل از اينكه بتوانيد هر نوع گرافيكي را ترسيم نماييد بايد يك محواي ابزار براي نايش آن داشته باشيد. محتواي ابزار شامل اطلاعاتي دباره سيستم,برنامه و پنجره اي است كه گرافيك بايد روي آن رسم كند وچه ناحيه اي از آ ن را نمايش دهد.در ويندوز ترسيم گرافيك همواره در محتواي ابزار پنجره برنامه صورت ميگيرد. در هر لحظه ممكن است اين پنجره در حالت حداكثر وبلعكس باشد. در كليه اين حالت برنامه نويس كاري با وضعيت فعلي پنجره ندارد بلكه اين ويندوز است كه بايد تشخيص دهد چه مقدار از گرافيك را كجا ترسيم نمايد. در زير مثالي را براي شما مطرح خواهيم نمود وبراي شما توضيح خواهيم داد كه چگونه با اين ابزار كار كنيد.همه ما به خوبي پيغام هاي بالون شكل (BaloonToolTip) را در ويندوز به خوبي مشاهده نموده ايم. بالون ها جهبه پيغام هايي هستند كه بصورت گرافيكي وبه وسيله همين محتواي ابزار ايجاد ميگردند كه البته اين محتواي ابزار با چند تابع گرافيكي ديگر تركيب شده واين بالون را خلق ميكنند. اين برنامه ما شبه بالون است يعني از لحاظ شناور بودن چيزي بين تول تيپ و بالون است.
خوب مي رويم سر اصل موضوع ::
ما در واقع در اين برنامه از کلاس خود CToolTipCtrlEx استفاده خواهيم نمود ولي در مراحل جلوتر آن را تبديل به بالون ميکنيم. تمامي توابع وبطور کلي عملياتي را که براي ايجاد بالون خواهيم کرد را در خود تابع , ()onPaint مينويسيم. ابتدا متغيري از نوع POINT را ايجاد ميکنيم و موقعيت هر شي ء را به وسيله پوينتر موس به دست آورده و پهناي آن و اندازه آن را هنگامي که به دست آورديم آنوقت خواهيم توانست بالون خود را بر روي آن شيء مورد نظر ايجاد نماييم:
با دستور بالا ما به وسيله موس گفته ايم که بالون ما در چه پهنايي از شيء نمايان شود. حال text مورد نظر را با کمي ويرايش در بالون خود بايد ترسيم کنيم. متغيري از نوع String تعريف نموده و طول آن را بدست مياوريم بعد از آن ماداميکه تک تک اين رشته برگردانه شد تا آخر خط ,آنگاه سايز آن خط را جهت ست کردن با سايز شبه بالون ما به دست ميآوريم. تا اينجاي کار خسته نباشيد...
;Width=(Width > Sz1.cx) ? Width : .cx حالا يک rect پيش فرض را در نظر گرفته وبعد از ايجاد , ميگوييم اگر مقدار ,Over باشد انگاه قسمت بالايي PRect را همواره برابر قسمت تحتاني rect مورد نظر در نظر بگير. با اين کار مقدار بالايي اين rect در مقدار پاييني rect پيش فرض ذخيره ميگردد سپس اين مقدار به دست آمده که همان قسمت تحتاني rect مورد نظر است , خاصيت TEXTMETRIC از ان کسر شده ودر WRect.top که پيش فرض است ذخيره ميگردد.با اين کار متن خود را به خاصيت TEXTMETRIC مبدل نموده و مقادير پهنا (rect) , را از بالا و از پايين تنظيم مينماييم تا شبه بالون ما شناور يا float بماند. ونيز اين اعمال وقتي که مقدار left باشد:
حال سراغ محتواي ابزار ميرويم. يک پهنا, مستطيل يا rect را پيش فرض دانسته و پشت زمينه اين rect را رنگ کرده و همين پهناي رنگ شده را 15 واحد زياد نموده و دوباره با محتواي ابزار پشت زمينه اين rect جديد را رنگ مکنيم. در مرحله بعد متن خود را با همين محتواي ابزار ترسيم مينماييم.
آرايه اي متشکل از پويينتر 18 تايي درست مينماييم.با اين کار يک چند ضلعي يا پوليگان با اين مقادير از پوينت ها ايجاد مينماييم چرا که چهار چوب اصلي ما در تول تيپ اينجا خلق ميشود. و ظرافت اصلي کار ما در اينجاست که به تناسب هر rect يک آرايه تعريف شده و گوشه هاي اين rect تنظيم ميگردد.شما با مراحل ساخت يک بالون آشنا شديد, ميتوانيد سورس اين برنامه را به همراه هدر آن دانلود نموده و خود بيشتر مطالعه نماييد.