τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Οι προσαρμοσμένοι πόροι είναι ένας τύπος πόρων που χρησιμοποιείται σε προγράμματα των Windows για την αποθήκευση δεδομένων, εικόνων, ήχου, δυαδικών αρχείων κ.λπ. Μέσω προσαρμοσμένων πόρων, οι προγραμματιστές μπορούν να διαχειρίζονται και να αποθηκεύουν κεντρικά διάφορα αρχεία πόρων που απαιτούνται από την εφαρμογή για εύκολη πρόσβαση και χρήση στο πρόγραμμα.
■Ακολουθούν ορισμένα βασικά σημεία σχετικά με τους προσαρμοσμένους πόρους:
●Τύποι προσαρμοσμένων πόρων:
1. Οι προσαρμοσμένοι πόροι μπορεί να είναι οποιαδήποτε δεδομένα ή αρχεία για συγκεκριμένη εφαρμογή, όπως εικόνες, ήχος, αρχεία διαμόρφωσης XML, αρχεία κειμένου κ.λπ.
2. Οι προσαρμοσμένοι πόροι μπορούν να αναγνωριστούν χρησιμοποιώντας ένα προσαρμοσμένο αναγνωριστικό τύπου πόρων, όπως "MY_CUSTOM_RESOURCE".
●Δημιουργία και επεξεργασία προσαρμοσμένων πόρων:
1. Οι προσαρμοσμένοι πόροι συνήθως περιλαμβάνονται στο αρχείο πόρων μιας εφαρμογής (.rc).
2. Οι προσαρμοσμένοι πόροι μπορούν να δημιουργηθούν και να επεξεργαστούν χρησιμοποιώντας ένα πρόγραμμα επεξεργασίας πόρων, όπως η προβολή πόρων του Visual Studio.
3. Στο αρχείο πόρων, μπορείτε να καθορίσετε ένα μοναδικό αναγνωριστικό πόρου και την αντίστοιχη διαδρομή αρχείου πόρων για κάθε πόρο.
●Αναφερθείτε και χρησιμοποιήστε προσαρμοσμένους πόρους:
1. Κατά την αναφορά και τη χρήση προσαρμοσμένων πόρων σε κώδικα, μπορείτε να χρησιμοποιήσετε αναγνωριστικά πόρων για να φορτώσετε ή να αποκτήσετε πρόσβαση στους αντίστοιχους πόρους.
2. Χρησιμοποιήστε τις αντίστοιχες λειτουργίες API (όπως LoadResource, FindResource, LockResource, κ.λπ.) για να φορτώσετε και να χειριστείτε προσαρμοσμένους πόρους.
3. Ανάλογα με τον τύπο του προσαρμοσμένου πόρου, μπορείτε να χρησιμοποιήσετε διαφορετικές λειτουργίες API (για παράδειγμα, οι πόροι εικόνας μπορούν να χρησιμοποιούν συναρτήσεις GDI και οι πόροι ήχου μπορούν να χρησιμοποιούν συναρτήσεις DirectSound) για την επεξεργασία προσαρμοσμένων πόρων.
■Το παρακάτω είναι ένα δείγμα απόσπασμα κώδικα που δείχνει πώς να φορτώσετε και να χρησιμοποιήσετε έναν προσαρμοσμένο πόρο:
#περιλαμβάνω<Windows.h>
int main()
{
HINSTANCE hInstance = GetModuleHandle(NULL) // Λήψη της τρέχουσας λαβής παρουσίας
HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(IDR_MY_RESOURCE), "MY_CUSTOM_RESOURCE");
HGLOBAL hResData = LoadResource (hInstance, hResource) // Φόρτωση προσαρμοσμένων πόρων
LPVOID pData = LockResource(hResData // Κλείδωμα προσαρμοσμένων πόρων).
// Χρήση προσαρμοσμένων πόρων...
επιστροφή 0;
}
Στο παραπάνω παράδειγμα, το IDR_MY_RESOURCE είναι το αναγνωριστικό του προσαρμοσμένου πόρου και η αντίστοιχη διαδρομή αρχείου πόρων ορίζεται στο αρχείο πόρων. Χρησιμοποιήστε τη συνάρτηση FindResource για να βρείτε τον προσαρμοσμένο πόρο, στη συνέχεια χρησιμοποιήστε τη συνάρτηση LoadResource για να φορτώσετε τον προσαρμοσμένο πόρο και, τέλος, χρησιμοποιήστε τη συνάρτηση LockResource για να κλειδώσετε τον προσαρμοσμένο πόρο για να αποκτήσετε έναν δείκτη στα δεδομένα του πόρου. Στη συνέχεια, ο δείκτης pData μπορεί να χρησιμοποιηθεί για επακόλουθη επεξεργασία και λειτουργίες σύμφωνα με τον τύπο και τις απαιτήσεις του πόρου.
Είναι σημαντικό να σημειωθεί ότι ο τρόπος χρήσης ενός προσαρμοσμένου πόρου εξαρτάται από τον τύπο του πόρου και τις ανάγκες της εφαρμογής. Οι προγραμματιστές μπορούν να επιλέξουν κατάλληλους τύπους πόρων και αντίστοιχες λειτουργίες API για την επεξεργασία προσαρμοσμένων πόρων με βάση τις πραγματικές ανάγκες.
Οι προσαρμοσμένοι πόροι παρέχουν μια ευέλικτη μέθοδο διαχείρισης πόρων για εφαρμογές Τα διάφορα δεδομένα και τα αρχεία που απαιτούνται από τις εφαρμογές μπορούν να διαχειρίζονται ομοιόμορφα και εύκολα και να χρησιμοποιούνται στο πρόγραμμα. Χρησιμοποιώντας προσαρμοσμένους πόρους, μπορείτε να κάνετε την εφαρμογή σας πιο αρθρωτή, συντηρήσιμη και επεκτάσιμη.
■στο VSΠροσθήκη προσαρμοσμένων πόρων
1. Προσθέστε πόρους
2. Κάντε κλικ στο "Προσαρμογή" και συμπληρώστε τον τύπο πόρου "ΚΕΙΜΕΝΟ"
3. Εισαγάγετε πόρους και δημιουργήστε αυτόματα αρχείο text1.bin, αναγνωριστικό πόρου: IDR_TEXT1
4. Στο VS, εισαγάγετε απευθείας το όνομα του αρχείου πόρου στον προσαρμοσμένο μεταγλωττιστή και τροποποιήστε το αναγνωριστικό Εμφανίζεται ένα μήνυμα σφάλματος: Δεν είναι δυνατή η φόρτωση εξωτερικών πόρων - ο πιθανός λόγος είναι ότι οι πόροι δεν έχουν εισαχθεί.
5. Προσθέστε πόρους στο πλαίσιο προβολής πόρων.
6. Εισαγάγετε αρχεία εξωτερικών πόρων.
7. Συμπληρώστε ξανά το όνομα του αρχείου πόρου και το αναγνωριστικό Σημειώστε ότι το όνομα του αναγνωριστικού πρέπει να συμπληρωθεί με τη συμβολοσειρά "ANNABELLEE".
8. Απλώς αποθηκεύστε τις ρυθμίσεις.
Υπάρχει μια απλούστερη μέθοδος, τροποποιήστε απευθείας το αρχείο πόρων POEPOEM.rc. Απλώς προσθέστε πόρους κάτω από τη γραμμή κάτω από το ΚΕΙΜΕΝΟ.
/*------------------------------------------------------------------------
057 WIN32 API Εξασκηθείτε κάθε μέρα
Παράδειγμα 57 POEPOEM.C: Πίνακας πόρων συμβολοσειράς και προσαρμοσμένοι πόροι
LoadString λειτουργία
LoadResource λειτουργία
FindResource λειτουργία
LockResource λειτουργία
AnsiNext Μακροορισμός
(γ) www.bcdaren.com Προγραμματιστής
-----------------------------------------------------------------------*/
#περιλαμβάνω <windows.h>
#περιλαμβάνω "resource.h"
ΑΠΟΤΕΛΕΣΜΑ ΑΝΑΚΛΗΣΗ WndProc (HWND, UINT, WPARAM, LPARAM) ;
ΕΝΔΕΙΞΗ hInst ;
ενθ WINAPI WinMain (ΕΝΔΕΙΞΗ hInstance, ΕΝΔΕΙΞΗ hPrevInstance,
PSTR szCmdLine, ενθ iCmdShow)
{ //Όνομα αρχείου πόρου, τίτλος και μήνυμα σφάλματος
TCHAR szAppName[16], szΛεζάντα[64], szErrMsg[64];
HWND hwnd;
MSG μήνυμα;
WNDCLASS wndclass;
//Φόρτωση πόρων συμβολοσειράς
LoadString(hInstance, IDS_APPNAME, szAppName,
μέγεθος του(szAppName) / μέγεθος του(TCHAR));
LoadString(hInstance, IDS_CAPTION, szΛεζάντα,
μέγεθος του(szΛεζάντα) / μέγεθος του(TCHAR));
wndclass.στυλ = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
//προσθήκη εικονιδίου
wndclass.εικονίδιο = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
//wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
//Προσαρμοσμένος δείκτης ποντικιού
wndclass.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR1));
wndclass.hbrΦόντο = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = ΜΗΔΕΝΙΚΟ;
wndclass.lpszClassName = szAppName;
//hInst = hInstance;//Δεν είναι στον αρχικό κωδικό και δεν θα αναφερθεί κανένα σφάλμα.
αν (!RegisterClass(&wndclass))
{
//LoadStringA(hInstance, IDS_APPNAME, (char *)szAppName,
// sizeof(szAppName));
LoadStringA(hInstance, IDS_ERRMSG, (απανθρακώνω *)szErrMsg,
μέγεθος του(szErrMsg));
MessageBoxA(ΜΗΔΕΝΙΚΟ, (απανθρακώνω *)szErrMsg,
(απανθρακώνω *)szAppName,
MB_ICONERROR);
ΕΠΙΣΤΡΟΦΗ 0;
}
hwnd = Δημιουργία παραθύρου(szAppName, szΛεζάντα,
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
ΜΗΔΕΝΙΚΟ, ΜΗΔΕΝΙΚΟ, hInstance, ΜΗΔΕΝΙΚΟ);
Εμφάνιση παραθύρου(hwnd, iCmdShow);
Ενημέρωση παραθύρου(hwnd);
ενώ (GetMessage(&μήνυμα, ΜΗΔΕΝΙΚΟ, 0, 0))
{
TranslateMessage(&μήνυμα);
Μήνυμα αποστολής(&μήνυμα);
}
ΕΠΙΣΤΡΟΦΗ μήνυμα.wParam;
}
ΑΠΟΤΕΛΕΣΜΑ ΑΝΑΚΛΗΣΗ WndProc ( HWND hwnd, UINT μήνυμα, WPARAM wParam, LPARAM
lΠαραμ)
{
//στατικός χαρακτήρας * pText;
στατικός LPCSTR pText;
στατικός HGLOBAL hResource;//Λαβή πόρων - μια λαβή που δείχνει σε ένα μπλοκ μνήμης
στατικός HWND hScroll;
στατικός ενθ iPosition, cxΧαρ, cyChar, cyClient,
iNumLines, xScroll;
HDC hdc;
ΚΑΤΑΣΚΕΥΗ ΒΑΦΗΣ ΥΣΤΕΡΟΓΡΑΦΟ;
RECT ορθός;
ΚΕΙΜΕΝΟΜΕΤΡΙΚΟ tm;
διακόπτης (μήνυμα)
{
υπόθεση WM_CREATE:
hdc = GetDC(hwnd);
GetTextMetrics(hdc, &tm);
cxΧαρ = tm.tmAveCharWidth;
cyChar = tm.tmΎψος + tm.tmExternalLeading;
ReleaseDC(hwnd, hdc);
//Το πλάτος της κάθετης γραμμής κύλισης σε pixel
xScroll = GetSystemMetrics(SM_CXVSCROLL);
//Δημιουργία γραμμής κύλισης
hScroll = Δημιουργία παραθύρου(ΚΕΙΜΕΝΟ("γραμμή κύλισης"), ΜΗΔΕΝΙΚΟ,
WS_CHILD | WS_VISIBLE | SBS_VERT,
0, 0, 0, 0,
hwnd, (HMENU)1, hInst, ΜΗΔΕΝΙΚΟ);
//Λήψη χειρισμού κειμένου
hResource = LoadResource(hInst,
FindResource(hInst, ΚΕΙΜΕΝΟ("AnnabelLee"),//Βεβαιωθείτε ότι έχει τον καθορισμένο τύπο και όνομα
Η θέση του πόρου στην καθορισμένη ενότητα
ΚΕΙΜΕΝΟ("ΚΕΙΜΕΝΟ")));
//Ανακτήστε έναν δείκτη σε έναν καθορισμένο πόρο στη μνήμη
pText = (LPCSTR)LockResource(hResource);
iNumLines = 0;//Διαβάστε τον αριθμό των γραμμών του κειμένου
//Λάβετε τον αριθμό των γραμμών κειμένου
ενώ (*pText != '\' && *pText != '0')//Τελειώνει με ή 0
{
αν (*pText == 'n')
iNumLines++;
//Επιστρέφει την επόμενη θέση (δείκτη) στη συμβολοσειρά ansi, AnsiNext σε Windows 16-bit
//Ένας ορισμός μακροεντολής, το Win32 χρησιμοποιεί το CharNext (το AnsiNext μπορεί να χειριστεί μόνο χαρακτήρες ansi
//Η συμβολοσειρά CharNext μπορεί να είναι ansi ή unicode)
//pText = AnsiNext(pText);
pText = (LPCSTR)CharNext((LPCWSTR)pText);
}
//*pText = '0';//Ο αρχικός κώδικας εδώ δηλώνει ότι τελειώνει με μηδενικό χαρακτήρα --- το πραγματικό κείμενο δεν τελειώνει με μηδενικό χαρακτήρα.
//Ορισμός γραμμής κύλισης
SetScrollRange(hScroll, SB_CTL, 0, iNumLines, ΨΕΥΔΗΣ);
SetScrollPos(hScroll, SB_CTL, 0, ΨΕΥΔΗΣ);
ΕΠΙΣΤΡΟΦΗ 0;
υπόθεση WM_SIZE:
MoveWindow(hScroll, ΧΑΜΗΛΟΣ(lΠαραμ) - xScroll, 0,
xScroll, cyClient = HIWORD(lΠαραμ), ΑΛΗΘΗΣ);
SetFocus(hwnd);//Ρύθμιση εστίασης
ΕΠΙΣΤΡΟΦΗ 0;
υπόθεση WM_SETFOCUS:
SetFocus(hScroll);//Καταγράψτε την εστίαση της γραμμής κύλισης
ΕΠΙΣΤΡΟΦΗ 0;
υπόθεση WM_VSCROLL:
διακόπτης (ΧΑΜΗΛΟΣ(wParam)) //Πρέπει να προστεθεί LOWORD επειδή ο κωδικός ειδοποίησης είναι στη λέξη low
{
υπόθεση SB_TOP:
iPosition = 0;
Διακοπή;
υπόθεση SB_BOTTOM:
iPosition = iNumLines;
Διακοπή;
υπόθεση SB_LINEUP:
iPosition -= 1;
Διακοπή;
υπόθεση SB_LINEDOWN:
iPosition += 1;
Διακοπή;
υπόθεση SB_PAGEUP:
iPosition -= cyClient / cyChar;
Διακοπή;
υπόθεση SB_PAGEDOWN:
iPosition += cyClient / cyChar;
Διακοπή;
υπόθεση SB_THUMBTRACK:
iPosition = HIWORD(wParam);
Διακοπή;
}
iPosition = Μέγιστη(0, ελάχ(iPosition, iNumLines));
αν (iPosition != GetScrollPos(hScroll, SB_CTL))
{
SetScrollPos(hScroll, SB_CTL, iPosition, ΑΛΗΘΗΣ);
InvalidateRect(hwnd, ΜΗΔΕΝΙΚΟ, ΑΛΗΘΗΣ);
}
ΕΠΙΣΤΡΟΦΗ 0;
υπόθεση WM_PAINT:
hdc = BeginPaint(hwnd, &ΥΣΤΕΡΟΓΡΑΦΟ);
pText = (απανθρακώνω *)LockResource(hResource);
GetClientRect(hwnd, &ορθός);
ορθός.αριστερά += cxΧαρ;//Εμφάνιση που ξεκινά από τη στήλη 2
ορθός.μπλουζα += cyChar * (1 - iPosition);
// Περιλαμβάνει το ύψος της εξωτερικής γραμμής της γραμματοσειράς. Κανονικά, οι κεφαλίδες εξωτερικής γραμμής δεν περιλαμβάνονται στο ύψος μιας γραμμής κειμένου.
DrawTextA(hdc, pText, -1, &ορθός, DT_EXTERNALLING);
EndPaint(hwnd, &ΥΣΤΕΡΟΓΡΑΦΟ);
ΕΠΙΣΤΡΟΦΗ 0;
υπόθεση WM_DESTROY:
FreeResource(hResource);
PostQuitMessage(0);
ΕΠΙΣΤΡΟΦΗ 0;
}
ΕΠΙΣΤΡΟΦΗ DefWindowProc(hwnd, μήνυμα, wParam, lΠαραμ);
}
/******************************************************************************
LoadString Συνάρτηση: Φορτώνει έναν πόρο συμβολοσειράς και, στη συνέχεια, αντιγράφει τη συμβολοσειρά σε ένα buffer με έναν τερματικό μηδενικό χαρακτήρα,
Ή επιστρέψτε έναν δείκτη μόνο για ανάγνωση στον ίδιο τον πόρο συμβολοσειράς.
*******************************************************************************
LoadResource Λειτουργία: Ανακτά μια λαβή που μπορεί να χρησιμοποιηθεί για τη λήψη ενός δείκτη στο πρώτο byte του καθορισμένου πόρου στη μνήμη
HGLOBAL LoadResource(
HMODULE hModule,// Μια λαβή στη λειτουργική μονάδα της οποίας το εκτελέσιμο περιέχει τον πόρο.Εάν το hModule είναι NULL, το σύστημα θα φορτώσει τον πόρο από τη μονάδα που χρησιμοποιήθηκε για τη δημιουργία της τρέχουσας διαδικασίας
HRSRC hResInfo//Η λαβή στον πόρο για φόρτωση
);
*******************************************************************************
FindResource Συνάρτηση: Καθορίζει τη θέση ενός πόρου του καθορισμένου τύπου και ονόματος στην καθορισμένη ενότητα
HRSRC FindResourceA(
HMODULE hModule,//Χειριστείτε στη μονάδα που περιέχει τον πόρο
LPCSTR lpName,//όνομα πόρου
LPCSTR lpType//Τύπος πόρου
);
*******************************************************************************
LockResource Λειτουργία: Ανάκτηση ενός δείκτη σε έναν καθορισμένο πόρο στη μνήμη
LPVOID LockResource(
HGLOBAL hResData//Η λαβή του πόρου προς πρόσβαση
);
*******************************************************************************
AnsiNext Μακροορισμός:
16Μια συνάρτηση api στα Windows (για την ακρίβεια ορισμός μακροεντολών) που μπορεί να επεξεργαστεί μόνο συμβολοσειρές ANSI.
Αργότερα, όταν εμφανίστηκε το Win32, η Microsoft εφάρμοσε την ενθυλάκωση μέσω του CharNext για συμβατότητα.
CharNextΜπορεί να είναι συμβολοσειρά ansi ή unicode.
Αυτή η συνάρτηση επιστρέφει την επόμενη θέση (δείκτη) στη συμβολοσειρά ansi.
*/
Πόρος.ηεπικεφαλής αρχείο
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ Τα αρχεία που δημιουργούνται περιλαμβάνουν.
// Για χρήση από το 057_POEPOEM.rc
//
#define IDS_APPNAME 1
#define IDS_Caption 2
#define IDS_CAPTION 3
#define IDS_ERRMSG 4
#define IDI_ICON1 1
#define IDC_CURSOR1 2
#define IDR_TEXT1 107
#define IDR_TEXT2 108
// Επόμενες προεπιλεγμένες τιμές για νέα αντικείμενα
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 126
#define _APS_NEXT_COMMAND_VALUE 40002
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#τέλος εαν
#τέλος εαν
057_POEPOEM.rcΤα αρχεία σεναρίου πόρων περιέχουν 4 τύπους πόρων:
1 . Πόροι εικονιδίων:
// Εικονίδιο
//
IDI_ICON1 ICON "D:\code\windows5.0\A καθημερινά
πρακτική\057_POEPOEM\057_POEPOEM\icon1.ico"
2 . Πόρος bitmap δείκτη ποντικιού:
// Δρομέας
//
IDC_CURSOR1 CURSOR "cursor1.cur"
3 . Πίνακας πόρων συμβολοσειράς:
// Πίνακας συμβολοσειρών
//
ΤΡΑΠΕΖΙ ΧΟΡΔΩΝ
ΑΡΧΙΖΟΥΝ
IDS_APPNAME "PoePoem"
IDS_CAPTION """Annabel Lee"" του Έντγκαρ Άλαν Πόε"
IDS_ERRMSG "Αυτό το πρόγραμμα απαιτεί Windows NT!"
ΤΕΛΟΣ
4 . Προσαρμοσμένοι πόροι:
// ΚΕΙΜΕΝΟ
//
ANNABELLEE ΚΕΙΜΕΝΟ "POEPOEM.TXT"
αποτέλεσμα λειτουργίας:
Εικόνα 9-9 Πίνακας πόρων συμβολοσειράς και προσαρμοσμένοι πόροι
Συνοψίζω
Στο σενάριο πόρων POEPOEM.RC, ο πόρος που ορίζεται από το χρήστη καθορίζεται ως τύπος ΚΕΙΜΕΝΟΥ και το όνομα κειμένου είναι "ANNABELLEE": ANNABELLEE TEXT POEPOEM.TXT
Κατά την επεξεργασία του μηνύματος WM_CREATE στο WndProc, η λαβή του πόρου λαμβάνεται μέσω του FindResource και του LoadResource. Το LockResource κλειδώνει τον πόρο και μια μικρή ρουτίνα αντικαθιστά την αντίστροφη κάθετο ( ) στο αρχείο με 0. Αυτό γίνεται για να διευκολυνθεί η χρήση της συνάρτησης DrawText στο επόμενο μήνυμα WM_PAINT.
[Σημείωση] Χρησιμοποιούμε το στοιχείο ελέγχου της γραμμής κύλισης του υποπαραθύρου αντί για τη γραμμή κύλισης του παραθύρου. Το στοιχείο ελέγχου της γραμμής κύλισης του υποπαραθύρου έχει μια αυτόματη διεπαφή πληκτρολογίου, επομένως δεν χρειάζεται να επεξεργαστείτε το μήνυμα WM_KEYDOWN στο POEPOEM.
Το POEPOEM χρησιμοποιεί επίσης τρεις συμβολοσειρές, τα αναγνωριστικά των οποίων ορίζονται στο αρχείο κεφαλίδας RESOURCE.H. Στην αρχή του προγράμματος, οι συμβολοσειρές IDS_APPNAME και IDS_CAPTION φορτώνονται στη μνήμη από το LoadString:
LoadString (hlnstance, IDS_APPNAME, szAppName,
sizeof (szAppName) /sizeof (TCHAR));
LoadString (hlnstance, IDS_CAPTION, szCaption,
sizeof (szCaption) /sizeof (TCHAR));
[Σημείωση] Αυτές οι δύο κλήσεις προηγούνται του RegisterClass. Το πρόγραμμα χρησιμοποιεί LoadStringA για να φορτώσει τις συμβολοσειρές IDS_APPNAME και IDS_ERRMSG και χρησιμοποιεί το MessageBoxA για να εμφανίσει ένα προσαρμοσμένο πλαίσιο μηνύματος:
if (!RegisterClass (&wndclass))
{
LoadStringA (hInstance, IDS_APPNAME, (char *) szAppName,
sizeof (szAppName)) ;
LoadStringA (hInstance, IDS_ERRMSG, (char *) szErrMsg,
sizeof (szErrMsg)) ;
MessageBoxA (NULL, (char *) szErrMsg,
(char *) szAppName, MB_ICONERROR) ;
επιστροφή 0 ;
}
[Σημείωση] Επιβολή μετατροπής από μεταβλητή συμβολοσειράς TCHAR σε δείκτη χαρακτήρων.
Το AnsiNext είναι ένας ορισμός μακροεντολών στα Windows 16-bit που χρησιμοποιεί το CharNext (το AnsiNext μπορεί να χειριστεί μόνο συμβολοσειρές ansi, το CharNext μπορεί να χειριστεί και συμβολοσειρές ansi και unicode).
pText = AnsiNext(pText);
Αντικατέστησε με:
pText = (LPCSTR)CharNext((LPCWSTR)pText);
Όλες οι συμβολοσειρές που χρησιμοποιούνται από το POEPOEM ορίζονται ως πόροι, επομένως το πρόγραμμα μπορεί εύκολα να μετατραπεί από μεταφραστές σε μη αγγλικές εκδόσεις.