سلام من یک طراحی شبیه فرم را با کمک gdi طراحی کردم و به صورت لایه یعنی layered window دارم به کاربر نشون میدم ، واسه رسوندن منظورم به این شکل مثال میزنم :
یک طراحی شبیه اسکین که با کمک توابع گرافیکی gdi به شکل زیر در اومده و به کاربر نشونش میدم که شده این :
توضیح : این طراحی داخل یک کلاس به نام mycanvas انجام میشه وخاصیت هایی مثل hdc و saveaspng وgetasstream و متدهایی بیشتری داره که واسش طراحی کردم.
و یک فرم ترانسپرنت که فقط کنترل ها را نمایش میده و روی طراحی قبلی نشونش میدم که این هست :
و خروجی نهایی که کاربر میبینه این هست :
حالا میخوام از این دو تا فرمی که روی هم قراردارند یک عکس قبل از اینکه کاربر فرم ها را ببینه بگیرم مشکل اینجاست که اکثرا توابع api ی که تست کردم یا زمانی کار میدن که دوتا فرم باید قابل دیدن باشه روی صفحه و یا اگر فرم ها را در مختصاتی خارج از محدوده دسکتاپ نمایش بدم و بخوام عکس گرفته بشه عکس خالی برمیگردونه یا خراب.
تنها تابعی که پیدا کردم تا الان و باهاش میشه از محدوده مورد نظرم عکس بگیرم در حالیکه هم بتونه خارج از محدوده دیده کاربر بر روی دسکتاپ را پوشش بده و هم فرم لایه ای پشت کنترل ها را در عکس داشته باشه دستور printwindow بود ، با دستور printwindow که امتحان کردم و عکس گرفته شده را در یک picturebox قرار دادم و محدوه مورد نظرم را برش دادم و داخل mypic2 ذخیره کردم ، عکس مشکلی نداره و خروجی برش داده شده این شده :
حالا اینجا دو سوال :
1- چرا عکسی که printwindow برگردونه داخل خاصیت image کنترل pictuebox ذخیره شده و داخل خاصیت picture ذخیره نشده که البته بعدش من اومدم با دستور زیر این خاصیت را هم ست کردم و نمیدونم درست هست یا نه :
with me
PrintWindow .hWnd, .mypic.hDC, 0
.
.
.
Set .mypic.Picture = .mypic.Image
end with
سپس با کمک دستور رندر خواستم اون را در یک کانواس رندر کنم که در نهایت به صورت یک فایل png ذخیرش کنم یا استریم شده داشته باشمش شبیه دستور زیر:
mypic2.Image.Render mycanvasclass.hDC, xLeft, xtop, xwidth, xHeight, .mypic2.Picture.Width, -.mypic2.Picture.Height, ByVal 0&
2- مشکل اینه که نمیدونم چرا رندری که انجام میدم داخل dc میاد عکس تصویر شماره 4 را به شکل عجیبی داخل کانواس که اسکینم هست (تصویر شماره 1) ترکیب میکنه ، عکس شماره 4 که درسته و هم محدوده و هم کنترل ها داخل عکس هستن اما چرا زمانی که میخواد با عکس شماره 1 ترکیبش کنه جای کنترل ها خالی می افته ؟ چطوری میشه این مشکل را حل کرد؟،خروجی نهایی کانواسم که به صورت png ذخیره کردم و یا میتونم اون را به صورت استریم هم داشته باشمش این شده : (میتونید عکس زیر را که png هست ذخیره کنید تا بهتر ببینیدش)
من در نهایت یک تصویر ترکیب شده میخوام که هم اسکین و هم کنترل ها داخل تصویر وجود داشته باشند.
میبینید که 90 درصد مراحل انجام شده و فقط مونده این بخش رندر کردن تصویر شماره 4 داخل تصویر شماره 1.
اگر کسی دیسکورد یا اسکایپ داره میتونم اجرای برنامه را نشون بدم بهش واسه بهتر متوجه شدنه مشکل.