مشاهده نسخه کامل
: چند سوال از ++vc
mehdicracker
06-03-2007, 00:34
سلام
یه چند تا سوال داشتم که اگر جواب بدید ممنون می شم .
1- ایا api برای sidebar کردن یک دیالوگ وجود داره .؟؟؟؟؟؟؟
منظورم اینه که دریچه اصلی بر نامه بره بالای صفحه و هر وقت موس رفت بالای صفحه این دیالوگ بیاد پایین .
می شه مثل برنامه virtual cd که یه toolbar داره .
یا همین taskbar ویندوز رو در نظر بگیرید . وقتی auto hide می کنید چه جوری میشه .
2 - چه جوری یه ایکون رو روی یه button در یه دیالوگ set کنیم
منظورم اینه که یه دکمه داریم که خاصیت icon بهش می دیم
حالا چه جوری این ایکون رو روش set کنیم .
همین .
ممنون
سلام.
1-در مورد سوال اولتون بشتر توضیح بدید. می خواید یک Dialog داشته باشید و یک menu به شکل sidebar؟
یا منظورتون چیز دیگه ای هست.
2-برای Set کردن یک Icon روی Button از کد زیر میتونید استفاده کنید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگه از VC6.0 استفاده میکنید از LoadIcon استفاده کنید و نیازی به استفاده از ()T_ نیست.
mehdicracker
12-03-2007, 16:19
سلام
ممنون از اينکه جواب داديد
مشکل Set icon حل شد با کمک شما
البته من مي خواستم يه icon از داخل يه فايل ديگه set کنم که از Extracticon
استفاده کردم
راجب به سوال side bar هم :
نمي دونم تا حالا virtual cd 7 رو نصب کرديد يا نه
ولي همراه برنامه که اجرا مي شه
يه side bar مي ياد کنار صفحه مثل side bar vista
ولي هر از چند ثانيه ايي مي ره گوشه صفحه و وقتي که موس رو ميبريم به کنار صفحه
دوباره ظاهر مي شه
من هم مي خوام ديالوگ اصلي بر نامه رو به همين صورت در بيارم
بعد 2 تا سوال ديگه هم برام پيش اومده
1- شما حساب کنيد که چند تا regqueryvalueex پشت سر هم داريم
وقتي اولين اين ها رو استفاده مي کنيم بر فرض يه ادرس رو مي بره به بافر
خب براي دومين api يه ادرس ديگه رو مي بره به بافر
ولي براي سومين api ديگه ادرس رو نمي بره به بافر و error مي ده
يعني مقدار بر گشتي تابع EA است که مي گه يه همچين مقداري داخل بافر است
حالا سوال من اين جاست که وقتي از اولين regqueryvalue استفاده کرديم
و ادرس رو برامون از داخل ريجستري در اورد و بعد از استفاده از مقدار ريجستري
چه کار کنيم که بافر خالي بشه و براي api بعدي اماده بشه
2-هر برنامه اي که باز مي شه يه قسمتي در taskbar هم براش ايجاد مي شه
حالا ما اگر نخوايم اين قسمت درست بشه چي کار بايد بکنيم
مثل اين عکس .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دوباره سلام.
درباره sidebar که شما میخواین دقیقا نمیدونم که Interface ی وجود داره یا نه. اما در مورد ساختش روش
ساده ای وجود داره.
کافیه شما با تغییر position Dialog این کار رو انجام بدید. با استفاده از این API:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ابتدا یک Dialog ایجاد کنید به عنوان sidebar. و اون رو به محلی که میخواید منتقل کنید.در MouseMove Event
مقداری Dialog رو shift بدید و وقتی که Focus از روش برداشته میشه دوباره به حالت قبل برگردونیدش.
یک نمونه خیلی ساده براتون میذارم :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
----------------------------------------------------------------
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
---------------------------------------------------------------
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نمونه ای نوشتم به شکل زیر دیده میشه :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و.....
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
البته همونطور که مشخصه چون از Sleep استفاده شده حرکت پنجره دیده میشه.
(به جای for بهتره از Thread استفاده بشه)
اما در مورد 2 تا سوالتون:
1- در مورد خالی کردن بافر میتونید از memset و یا ZeroMemry استفاده کنید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اما به نظرم نباید براتون چنین مشکلی پیش بیاد. اگه کدتون و مقادیر کلیدها رو میذاشتید
بهتر میشد راجع بهش صحبت کرد.
2- Interface ی وجود داره به نام ITaskbarList که میتونید ازش استفاده کنید.
یک pointer به این Interface ایجاد میکنید و بعد با استفاده از CoInitialize یک COM Lib رو init میکنید
وبا استفاده از CoCreateInstance میتونید از این pointer استفاده کنید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
mehdicracker
14-03-2007, 17:20
سلام
ممنون از اینکه وقت گذاشتید .
در رابطه با sidebar این روش ابتکاری و جالبی هست و لی
دیالوگ من تشکیل شده از 14 . button و نمی تونم به صورت افقی درش بیارم و می خوام که به صورت
عمودی باشه که البته فکر کنم با تغییر مختصات بشه این کار رو کرد
البته این روش رو می خوام بزارم برای اخرین راه :blush:
برای ساختن Sidebar فکر می کنم که اصلا یه برنامه مخصوص وجود داره
چون من virtual cd 7 رو نصب کردم و تمام توابع مربوط به sidebar رو در یه dll پیدا کردم
وبعد دیدم که این dll کلا چیز خیلی جالبی است
مثل اینکه این dll از یه برنامه جدا مشتق شده که مثلا می تونید انتخاب کنید که کدام دیالوگ به صورت sidebar
در بیاد . زمانش چقدر باشه و خیلی چیزهای دیگه.
فکر می کنم باید بگردم دنبال این برنامه.( ولی بازم از شما ممنون هستم )
در مورد 2 سوال دیگه هم اول که بافر پاک نشد مشکل از کد من هست نمی دونم ولی بازم نشد
من یه تکه از کد رو برای شما می زارم که اگر اشکالی بود لطف کنید و بگید .
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این تکه کد قرار اسم هایی رو از ریجستری بخونه و Set کنه روی button های مورد نظر
و یا این کد :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این کد هم قرار اگر ادرسی در ریجستری بود اون رو بده ExtractIcon و ایکون مورد نظر set بشه
روی button مورد نظر
که روی 2 تا از button ها ایکون نمی افته و بقیه اش هم از قسمت RegQueryValueEx
همون error قبلی می ده و دیگه هیچ کدوم از شرط ها هم برقرار نمی شه
حتی اگر برای هر کدوم از قسمت ها یه RegOpenKeyEx و RegCloseKey بزارم هم بازم کار نمی کنه
در مورد سوال دوم هم مطمئن هستم که کار می کنه
ولی اگر دوباره مشکلی پیدا کردم بازم مزاحمتون می شه
بازم ممنون:biggrin:
mehdicracker
14-03-2007, 17:30
سلام
لینک این برنامه رو پیدا کردم
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
مثل اینکه برای کلاس mfc هست
البته هنوز تستش نکردم
ولی خبرش رو بهتون می دم
دوباره سلام.
خواهش میکنم کاری نکردم. اتفاقا مسئله ی جالب هست و منم پی گیرشم.
در مورد کد اول به نکته ای برخوردم.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای برگردوندن طول بافر دوبار از این کد استفاده کردید. البته درسته. ولی در بعضی از موارد.
"اگه طول بافر کوچیک باشه مقدار برگشتی این تابع برابر با طول بافر هست."
ولی بهتره از این تابع استفاده کنید :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در حقیقت همون strlen هست البته برای کاراکتر های Unicode.
دومین نمونه ای که گذاشتید رو تست کردم. کاملا صحیح کار کرد. تنها سوالی از شما دارم.
در مورد HINSTANCE hinst که در کد استفاده کردید. hinst رو کجا Init میکنید؟
من در کدتون از AfxGetModuleHandle استفاده کردم. hinst باید یک Handle به یک Module باشه.
کجا از این Module استفاده کردید؟ (مثلا یه Dll )
راستی error ی که براتون پیش میاد رو ممکنه بذارید.
ممنون.
mehdicracker
15-03-2007, 13:02
سلام
دوباره ممنون someone جان
از wcslen استفاده کردم کار نکرد ولی از کار نکرد
چون من از ascii استفاده کردم و strlen استفاده کردم و کار کرد
دومین نمونه ای که گذاشتید رو تست کردم. کاملا صحیح کار کرد. تنها سوالی از شما دارم.
راستش منظور شما رو درست نفهمیدم که گفتید کار کرد
یعنی روی 4 تا button که ادرسش از داخل ریجستری خونده می شه ایکون افتاد یا همون ایکون error که پیش فرض گذاشتمش
چون مال من 2 تا ایکون اولی Set می شد ( البته پیش فرض ) و بقیه ی ایکون ها خالی بود و هیچ اتفاقی نمی افته
در مورد HINSTANCE hinst که در کد استفاده کردید. hinst رو کجا Init میکنید؟
من در کدتون از AfxGetModuleHandle استفاده کردم. hinst باید یک Handle به یک Module باشه.
کجا از این Module استفاده کردید؟ (مثلا یه Dll )
اگر می شه بیشتر توضیح بدبد
راستی error ی که براتون پیش میاد رو ممکنه بذارید.
راستش من از برنامه های کرک برای پیدا کردن این error ها استفاده می کنم
منظورم مقادیر برگشتی توابع است
من شماره error رو می گیرم و داخل error lookup این مقادیر رو پیدا می کنم
مثل شکل زیر :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دوباره سلام.
خواهش میکنم.
جدی!!؟ مگه بافر شما نوعش TCHAR نیست!؟
----------------------------------------------------------------------------------
اول در مورد Error ی که براتون پیش اومده باید بگم که طول بافرتون کافی نیست. یعنی مقداری که
قرار توش بریزید طولش بیشتر از اندازه ی بافرتون هست.
طولش رو بیشتر کنید. ( مثلا 1024 ) مشکل حل میشه.
----------------------------------------------------------------------------------
در مورد ExtractIcon که شما ازش استفاده کردید آرگومان اول یک Handle به یک Module (یک فایل exe و یا Dll)
هست(HINSTANCE) که میخواید Icon ها رو از اون استخراج کنید. hinst یک handle به این module باید باشه.
(مثلا با استفاده از LoadLibrary ). استفاده از AfxGetModuleHandle این Handle رو به خود برنامه Set میکنه.
----------------------------------------------------------------------------------
منتظر نتیجه هستم.
موفق باشین.
mehdicracker
16-03-2007, 23:32
سلام
ممنون از اینکه جواب دادید someone جان
چرا نوع بافر من TCHAR هست
ولی کار نکرد . شاید این تابع unicode
رو ساپورت نمی کنه
==========================
کردم .نشد
شاید بخاطر اینه که همه به یه جا ادرس دهی شدن
یعنی بافرشون یکی است یعنی همین NumofBut
البته نباید اینجوری باشه
چون باید data ها replace بشوند
ولی نشد
=========================
منظورتون این جوریه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته اینو برای SHELL_NOTIFYICON
نوشتم
می گم someone جان وقت داری یه برنامه برای کرکر ها رو بنویسیم
یعنی تکمیلش کنیم
چون خودم نصفشو نوشتم
مونده همین کار هاش ؟؟؟؟؟؟؟؟؟
دوباره سلام.
خواهش میکنم.
---------------------------------------------------------------------
احتمالا شما از VC6.0 به عنوان IDE استفاده میکنین.
که در اون TCHAR به این شکل تعریف میشه :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و IDE که من ازش استفاده میکنم VC8.0 هست که در اون TCHAR به این شکل تعریف میشه :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و به خاطر همین هست که نمیتونید از wcslen استفاده کنین.
---------------------------------------------------------------------
اینکه از یک بافر استفاده میکنین نباید مشکلی ایجاد کنه. چون همزمان که از بافر استفاده نمیکین.
من وقت استفاده از کدتون با چنین مشکلی رو برو نشدم.
---------------------------------------------------------------------
درسته! اینم یکی دیگه از روش هاست. که باز یکی دیکه از MFC Internal Code هست که برای جستجو و پیدا
کردن Handle منبع مورد نظر به کار میره.
---------------------------------------------------------------------
در مورد برنامه بیشتر توضیح بدین.کارهای گروهی همیشه جالبند!
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.