16-09-2006, 02:06
|
|
|
חבר מתאריך: 13.09.06
הודעות: 5
|
|
רוני שלום
תודה רבה על העזרה.
אני מנסה לבנות פלאג אין מסויים ל ACTIVEX מסוים.
אני יודע שזה אפשרי לקבל את ה DC שלו אך מאוד מסובך בשבילי מאחר שאני מתכנת ב C# והידע שלי בC++
הוא בסיסי וגם ככה עליתי פה לרף שגבוהה הרבה מהידע שלי בC++.
בכל מקרה אחרי הרבה בדיקות ונסיונות:
ראשית מאחר שאין לי DC מאותחל שאני מקבל מהאפליקציה הדרך היחידה ליצור DC היא ע"י הפונקציה:
(hDC=CreateCompatibleDC(NULL
אני שם NULL
עכשיו כל הנסיונות ליצור BITMAP ולצבוע אותו לא צלחו מאחר שהוא יצא בפורמט GRAYSCALE בגלל שה DC =NULL
אך ניסיון אחד הצליח ע"י העלאת BITMAP מה-RESOURCE בחירה שלו:
bmpExercising=LoadBitmap(hInst, MAKEINTRESOURCE(IDB_EXERCISING));
SelectObject(hDC,bmpExercising);
ושורה אחרי להגדיר אותו מחדש:
bmpExercising = CreateDIBitmap(hDC, &bmih, CBM_INIT, lpBits, &bmi, DIB_RGB_COLORS);
אם תסתכל ב MSDN תבין שכדי ליצור CreateDIBitmap צריך להגדיר שתי מבנים ומערך אחד לאתחל את הפיקסלים:
1)
BITMAPINFOHEADER bmih;
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biWidth = 100;
bmih.biHeight = 100;
bmih.biPlanes = 1;
bmih.biBitCount = 32;
bmih.biCompression = BI_RGB;//no compression
bmih.biSizeImage = 0;//can be 0 since BI_RGB is being used
bmih.biXPelsPerMeter = 0;//not needed
bmih.biYPelsPerMeter = 0;//not needed
bmih.biClrUsed = 3;//maximum colours
bmih.biClrImportant = 0;//worth setting? no.
2)
BITMAPINFO bmi;
bmi.bmiHeader = bmih;
bmi.bmiColors[0].rgbBlue = 0;//no palette
bmi.bmiColors[0].rgbGreen = 0;//no palette
bmi.bmiColors[0].rgbRed = 0;//no palette
bmi.bmiColors[0].rgbReserved = 0;//no palette
3)
unsigned long int *lpBits = new unsigned long int[10000];
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
lpBits[count++] = 0x00CC3300;
}
להזין את הפונקציה-
bmpExercising = CreateDIBitmap(hDC, &bmih, CBM_INIT, lpBits, &bmi, DIB_RGB_COLORS);
עכשיו ניתן לצייר על גבי ה DC ב 32BIT
ולמלא BUFFER אם כל הנתונים של כל פיקסל
בינתיים עוד לא מימשתי את זה למטרה שלי ,אני מקווה שזה יצליח לי בסוף
אם יש לך רעיונות טובים יותר אשמח לשמוע.
|