PDA

View Full Version : سوال: مشكل با printwindow درapi



mahboube
یک شنبه 31 مرداد 1389, 14:03 عصر
سلام دوستان
من مي خوام از تابع printwindow استفاده كنم.





IntPtr hwnd = textBox1.Handle;



Bitmap bm = newBitmap(pictureBox1.Size.Width, pictureBox1.Size.Height);
if (bm != null)
{
//MessageBox.Show("bm != null");
using (Graphics g = Graphics.FromImage(bm))
{
if (g == null) returnnull;
System.IntPtr bmDC = g.GetHdc();
bool ok = PrintWindow(hwnd, bmDC, 0); // RETURNS FALSE-- WHY?????
MessageBox.Show(ok.ToString());
g.ReleaseHdc(bmDC);
}
}
return bm;



و خروجيشو تو يه picture box نشون بدم ولي كد بالا جواب نمي ده.فكر مي كنم به خاطر hdc ش باشه.كد api به vb6 درسته ولي تو C#‎‎‎اجرا نميشه.
مشكلش چيه؟
ممنون.

mahboube
یک شنبه 31 مرداد 1389, 15:11 عصر
آقا يكي به من بگه از اين hdc ها چطوري بايد تو c# استفاده كنم؟؟؟
تو توابع api تو vb6 دوتا handle داريم:
hwnd كه معادل handle هست و HDC كه نمي تونم اجراش كنم.
براي تصاوير استفاده مي شه كه فقط OBJECT ايي كه از نوع GRAPHIC ساخته شده باشن خصوصيتش (GETHDC)رو دارن.ولي اجرا نميشه.لطفا كمك!

mahboube
یک شنبه 31 مرداد 1389, 15:30 عصر
آقا يكي به من بگه از اين hdc ها چطوري بايد تو C#‎ استفاده كنم؟؟؟
تو توابع api تو vb6 دوتا handle داريم:
hwnd كه معادل handle هست و HDC كه نمي تونم اجراش كنم.
براي تصاوير استفاده مي شه كه فقط OBJECT ايي كه از نوع GRAPHIC ساخته شده باشن خصوصيتش (GETHDC)رو دارن.ولي اجرا نميشه.لطفا كمك!

خودم يه تابع api پيداكردم:

[DllImport("user32.dll", EntryPoint = "GetDC")]
public static extern IntPtr GetDC(IntPtr ptr);
كه hdc رو برمي گردونه ولي بازم برنامه اجرا نميشه.
هركي مي دونه چرا بهلپه لطفا!

mahboube
یک شنبه 31 مرداد 1389, 16:22 عصر
آقا يعني هيشكي اينجا اين مشكلو نداشته؟؟؟بابا من بايد از textbox ام عكس بگيرم.كمك لطفا

mahboube
دوشنبه 01 شهریور 1389, 09:22 صبح
آقا يعني هيشكي اينجا اين مشكلو نداشته؟؟؟بابا من بايد از textbox ام عكس بگيرم.كمك لطفا

mahboube
دوشنبه 01 شهریور 1389, 10:16 صبح
آقا يعني هيشكي اينجا اين مشكلو نداشته؟؟؟بابا من بايد از textbox ام عكس بگيرم.كمك لطفا

مشكل من حل شد.
از يك تابع ديگه استفاده كردم. bitblt از كتابخونه gdi32.

private static extern bool BitBlt(
IntPtr hdcDest, // handle to destination DC

int nXDest, // x-coord of destination upper-left corner

int nYDest, // y-coord of destination upper-left corner

int nWidth, // width of destination rectangle

int nHeight, // height of destination rectangle

IntPtr hdcSrc, // handle to source DC

int nXSrc, // x-coordinate of source upper-left corner

int nYSrc, // y-coordinate of source upper-left corner

System.Int32 dwRop // raster operation code

);