میخوام رو صفحه نمایش screen (خارج از هر محدودیت مکانی) یک مستطیل رنگی رسم کنم
داخل یک فرم میشه اینکارو انجام داد اما در اینصورت محدود به اندازه و محل فرم هست.
میخوام رو صفحه نمایش screen (خارج از هر محدودیت مکانی) یک مستطیل رنگی رسم کنم
داخل یک فرم میشه اینکارو انجام داد اما در اینصورت محدود به اندازه و محل فرم هست.
اگه فرمت maximize باشه یا mdiform باشه و بی رنگ مشکلت حل نمی شه
فکر کنم اگه از یه فرم دیگه استفاده کنی درست بشه
قفل مخفی تلگرام، واتس اپ و همه برنامه ها - قفل حرفه ای برای دستگاه اندرویدی شما - با امکان مخفی شدن و جلوگیری از Unisntall شدن
--آموزش ایجاد برنامه های چند زبانه در WPF
-BeRMOoDA File Encrypter-open source-using WPF, C# and MVVM Pattern
-نمونه برنامه ساده و کامل با الگوی MVVM برای کار با دیتابیس با استفاده از Entity Framework در WPF
-WPFMessageBox فارسی/انگلیسی - با قابلیت تغییر Skin
من قبلا C++ استفاده میکرم اونجا یه مفهومی داشتیم به نام DC که برای کار های گرافیکی از اون استفاده میکردم. برای گرفتن DC هم از تابع GetDC استفاده میکردیم برای این که DC از یه فرم بگیریم اسم فرم رو به عنوان ورودی به تابع میدادیم. برای این که از desktop استفاده کنیم عدد صفر رو به عنوان ورودی به تابع میدادیم. تو #C هم حتما باید یه همچین کاری بشه کرد ولی من دقیق نمیدونم. اساتید که حرفه ای هستن شاید بتونن بگن که چطور به این مفهوم میتونید استرسی پیدا کیند.
اگر راه مناسبی پیدا نشد یه راهش اینه که user32.dll رو import کنی و از توابع اون استفاده کنی. ولی قطعا روش مناسب تری هم هست
اینجا میتونی از هر شی یک شی گرافیکی بگیری اما چجوری از screen میشه یه شی گرافیکی گرفت؟
سلام من قبلا برنامه ای نوشتم که روی دسکتاپ یک متن رو مینوشتم
همون طور که دوستمون گفته درسته از api های ویندوز استفاده کن
[DllImport("user32.dll", EntryPoint="GetDesktopWindow")]
public static extern IntPtr GetDesktopWindow();
[DllImport("user32.dll",EntryPoint="GetDC")]
public static extern IntPtr GetDC(IntPtr hWnd);
از GetDesktopWindow پوینتر desktop رو بگیر بده به GetDC و
IntPtr hdc = GetDC(GetDesktopWindow());
حالا از hdc با createFromHdc یک گرافیک بگیر و رو اون بنویس یا بکش
Graphics newGraphics = Graphics.FromHdc(hdc);
newGraphic.Draw...
ولی این دستور چیزی رسم نکرد!!!
newGraphics.FillRectangle(System.Drawing.Brushes.B lack, new Rectangle(20, 20, 200, 200));
دستورات جالبی بودند ولی من هم چیزی که رسم کرده بودم رو ندیدم.
دقیقش رو چک میکنم براتون میگذارم الان دم دست نیست
باید از کد زیر بجای GetDC استفاده کرد:
[DllImport("User32.dll", SetLastError=true)]
public static extern IntPtr GetWindowDC(
IntPtr WindowHandle);
و به این شکل مینویسیم:
IntPtr desktopHandle = Win32.GetDesktopWindow();
IntPtr desktopDC = Win32.GetWindowDC(desktopHandle);
Graphics desktop = Graphics.FromHdc(desktopDC);
جالب بودند.
از همون GetDC هم میشه استفاده کرد ولی باید عدد صفر رو به عنوان پارامتر با تابع پاس کنید تا از دسکتاپ بتونید هندل بگیرید.
<P>دوست منو از این که جسارتا نظرم را میگویم ببخشید</P>
<P>در ویندوز کلیه پنجره ها دارای handle میباشند که با استفاده از هندل میتوانیم عملیاتهای خاصی بر روی آنها انجام دهیم معمولا برای گرفتن دستگره گرافیک برنامه ها از تابع</P>
<P> GetDC استفاده می شود که دستگیره دسکتاپ هم صفر است یعنی (0)getdc حالا یک متغییر گرافیکی مثل Tbitmap تعریف کرده و dc دستگیره آن را برابر (0)getdc قرار می دهیم حالا هر چه در Bitmap ترسیم کنید بر روی دسکتاپ ترسیم می شود.</P>
<P>delphi</P>
<P>var</P>
<P>b:tbitmap</P>
<P>begin</P>
<P>b:=tbitmap.create;</P>
<P>b.cavas.handle:=getdc(0);</P>
<P>b.canvas.rectangle(10,10,100,100)</P>
<P>end;</P>
<P>آرزوی موفقیت.</P>
آره یادم رفته بود دیشب نگاه کردم D:
فقط یک چیزی که من نتونستم پیدا کنم دستور رrefresh اون بود که بتونی پاکش کنی و دوباره بنویسی
مثل کنترل Invalidate یا Refresh نداره
تابع RedrawWindowفقط یک چیزی که من نتونستم پیدا کنم دستور رrefresh اون بود که بتونی پاکش کنی و دوباره بنویسی
api هستش
من هنوز چکش نکردم
[DllImport("user32.dll")]
static extern bool RedrawWindow(IntPtr hWnd, [In] ref RECT lprcUpdate,
IntPtr hrgnUpdate, uint flags);
[DllImport("user32.dll")]
static extern bool RedrawWindow(IntPtr hWnd, IntPtr lprcUpdate,
IntPtr hrgnUpdate, uint flags);
http://pinvoke.net/default.aspx/user32.RedrawWindow
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Media;
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;
namespace audio
{
internal class UnmanagedMethods
{
[DllImport("user32")]
internal static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
internal static extern void ReleaseDC(IntPtr dc);
}
public class DrawToScreen
{
public void PaintRectangleToScreen()
{
IntPtr deskDC = UnmanagedMethods.GetDC(IntPtr.Zero);
Graphics g = Graphics.FromHdc(deskDC);
g.FillRectangle(new SolidBrush(Color.FromArgb(100, Color.CadetBlue)), 0, 0, 300, 300);
//g.EndContainer(cont);
g.Dispose();
UnmanagedMethods.ReleaseDC(deskDC);
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
DrawToScreen d = new DrawToScreen();
d.PaintRectangleToScreen();
}
}
}
اینم نتیجه کار مشکل چیه ؟
[DllImport("user32.dll", EntryPoint = "ReleaseDC", SetLastError = true)]
internalstaticexternint ReleaseDC(IntPtr hWnd, IntPtr hDC);
یک جمع بندی کلی هم اینجا میگذارم تا برای بعدا روزی به کار آید
ReleaseDC,RedrawWindow,GetDesktopWindow,GetDC
این قسمت redrawwindow هنوز درست نشده که جمع بندی کردییک جمع بندی کلی هم اینجا میگذارم تا برای بعدا روزی به کار آید
ReleaseDC,RedrawWindow,GetDesktopWindow,GetDC
اینم حل بشه خودم واسه همه پستهات تشکر میزنم;)
آقای rasoul_ras این عکس رو بصورت attach اگه قرار میدادی خیلی بهتر بود!
فکر کنم چک نکردی جمع بندی رو (بابا ما که همیشه متشکریم )
کاملا حل شد با تشکر از همه بچه هایی که بحث رو تکمیل کردند
بابا مگه من ننوشتم تشکر نکنید؟ :((فکر کنم چک نکردی جمع بندی رو (بابا ما که همیشه متشکریم )
کاملا حل شد با تشکر از همه بچه هایی که بحث رو تکمیل کردند
احتمالا من اشتباه میکنم! یه نگاه بنداز وقتی روی دسکتاپ مینویسی Hello و با فرم از روش رد میشی پاک میشه! ;)
ببخشید من اینجا سوالم رو بد پرسیدم ولی جوابم رو گرفتم
من فقط برای پاک کردن صفحه تابعی رو میخواستم که بتونم پاکش کنم
حالا فهمیدم منظورتون چیه ولی به نظرم( فکر کنم ) تو این قسمت هر لحظه خودمون باید صفحه رو Refresh کنیم یعنی پاک کنیم و دوباره بنویسیم هر بار منتظر رسیدن message
wm_paint به صفحه بشیم hook کنیم و وصفحه خودمون رو بکشیم