c הוספת תמונה מresources - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

c הוספת תמונה מresources


omer1595

Recommended Posts

שלום,

ניסיתי ליצור תוכנית שתחליף את הרקע של המחשב בתמונה שאני אבחר, אבל אני לא רוצה לקרוא לתמונה דרך התיקייה שלה, אלא דרך resource files.

השאלה היא איך אני יכול להגיד בתוכנית שאני רוצה לקרוא לתמונה שנמצאת בresources

זאת התוכנית שבניתי:

#include <Shlobj.h>

void main()
{
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,L"img2.jpg", SPIF_SENDCHANGE);
}

מאוד ארוכה ומורכבת :lol:

אבל היא עדיין לא עובדת לצערי

הקובץ img2.jpg נמצא על שולחן העבודה וכדי להוסיף אותו לresource files פשוט לחצתי על resource files כפתור ימיני וadd existing item

תודה רבה לכל מי שיעזור! :)

קישור לתוכן
שתף באתרים אחרים

אתה צריך להשתמש בפונקציות הבאות:

FindResource - מעבירים לה שם של הresource והיא מחזירה מצביע אליו.

SizeofResource - מקבלת את המצביע ל-resource ומחזירה את הגודל שלו בבתים.

LoadResource - מקבלת את המצביע ל-resource, טוענת אותו פיזית לזכרון ומחזירה handle לזכרון הזה.

LockResource - מקבלת את התוצאה של LoadResource ומחזירה מצביע לזכרון הפיזי שמחזיק את המידע.

התוצאה שקיבלת מ-LockResource היא מצביע למיקום בזכרון שבו יושב התוכן של הקובץ, והתוצאה של SizeofResource היא הגודל של הזכרון הזה. אתה צריך לשמור את התוצאה לקובץ זמני, ואז לקרוא לפונקציה שלך עם הקובץ הזה.

קישור לתוכן
שתף באתרים אחרים

אתה צריך להשתמש בפונקציות הבאות:

FindResource - מעבירים לה שם של הresource והיא מחזירה מצביע אליו.

SizeofResource - מקבלת את המצביע ל-resource ומחזירה את הגודל שלו בבתים.

LoadResource - מקבלת את המצביע ל-resource, טוענת אותו פיזית לזכרון ומחזירה handle לזכרון הזה.

LockResource - מקבלת את התוצאה של LoadResource ומחזירה מצביע לזכרון הפיזי שמחזיק את המידע.

התוצאה שקיבלת מ-LockResource היא מצביע למיקום בזכרון שבו יושב התוכן של הקובץ, והתוצאה של SizeofResource היא הגודל של הזכרון הזה. אתה צריך לשמור את התוצאה לקובץ זמני, ואז לקרוא לפונקציה שלך עם הקובץ הזה.

ניסיתי להבין איך אני משתמש בפונקציות האלה... אבל לא הבנתי :-\

אתה יכול לתת לי דוגמא לשימוש בפונקציות האלה?

קישור לתוכן
שתף באתרים אחרים

האמת היא שאני לא יותר מדי מכיר את ההתעסקות עם resourceים וקצת הסתבכתי עם זה, אבל זה מה שהצלחתי:

קודם כל, תוודא שהוספת את התמונה באופן תקין: פתח את ה-resource view ע"י view > other > resource view, בחלון החדש תוסיף את ה-resource באמצעות כפתור ימני על הפרויקט ואז add resource > import. בחר את הקובץ שאתה רוצה להוסיף. יכול להיות שהוא יבקש ממך לתת לקובץ "custom type", אז תרשום לו jpg.

עכשיו תראה שהוא הוסיף לך את הקובץ בחלון של ה-resource view, תחת שם כלשהו (משהו כמו IDB_BITMAP1, לדוגמה). שמור את השינויים ותחזור ל-solution explorer. שים לב שנוצר לך קובץ בשם resource.h. עכשיו אתה צריך לכתוב משהו כזה:

#include <stdio.h>
#include <windows.h>
#include "resource.h"

int main()
{
HRSRC resource = FindResource(NULL, MAKEINTRESOURCE(IDB_BITMAP1), "jpg");
HGLOBAL glob = LoadResource(NULL, resource);
DWORD size = SizeofResource(NULL, resource);
LPVOID p = LockResource(glob);

FILE* file = fopen("C:\\temp\\img.jpg", "wb");
int written = fwrite(p, 1, size, file);
fclose(file);

return 0;
}

כמובן תשנה את IDB_BITMAP1 למזהה של ה-resource כפי שהוא מופיע בקובץ resource.h, ואם צריך אז תשנה את שם הקובץ הזמני למה שאתה רוצה, וכדאי להוסיף בדיקת שגיאות (כל הפונקציות הנ"ל מחזירות NULL במקרה של כשלון).

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...