-------------------------------------------------- ----------------------------- Windows resource files no matter what programmed under DOS is still programmed under Windows, we always use To many other data, such as sound data, graphics data, text, etc., in DOS, can we define the format of these files, but this has caused many resource sharing problems, everyone Many games under DOS may still be remembered, their graphics are stored in their own format, you can't use standard view software. It is not possible to save it as other formats. Although we can still do this in Win32, but Win32 is programmed to us a solution - it is a resource file that is unified, including strings, graphics, dialogs, and the above buttons, text, etc. In the file, it can be convenient to use it in different files. Most importantly, if we use your own file format, you should involve reading and writing operations in these files, but complicated, but use the resource file, Windows offers a range of APIs to load resources. Very convenient. Now let's take a simple source file for a very simple resource file, its extension is .rc, when it is compiled with the resource compiler, you can enter the .exe file when you use the .RES file, in Link: # include
(You can download it in the programming tool), we can use the resource editor to edit resources, or you can define your resources yourself in your text editor yourself. Using resources in the program In the program, you must first load such as memory before using the resource. Windows defines a range of APIs to load resources, such as loadMenu, LoadString, LoadBitmap, etc., such as LoadBitmap: HbitMap LoadBitmap , // handle of application instance LPCTSTR lpBitmapName // address of bitmap resource name); return values of these functions is a Load handle the call parameters typically at least two: hInstance and ResouceName, this ResouceName (eg BitmapName, MenuName) is In the value of #define in the resource file, if you use #define my_ICON 10 / my_ICON ICON "main.ico" to define an icon, you can use the main.ico icon in the program to use Loadicon (Hinstance, 10) To load icon files that have been defined as 10. Another parameter hinstance is the handle of the execution file, which corresponds to the file name where the resource is located, you can get Hinstance with Invoke getModuleHandle, NULL when executing the program. Other resources are not explicitly mounted, such as dialog resources, which is loaded by Windows in the functions of the dialog, in the following example Invoke DialogBoxParam, Hinstance, DLG_Main, Null, Offset _PrOcdlgmain, 0 is a dialog that has been defined in a resource file on the screen, and there is no API such as loadDialogbox to first load the dialog.
Win32ASM - Show a dialog and introduces so many related things, let us see how to display a dialog, the source program is as follows: .386.Model flat, stdcalloption casemap: none; case sensitiveinclude windows.include user32.incinclude kernel32 ? .incinclude comctl32.incinclude comdlg32.incincludelib user32.libincludelib kernel32.libincludelib comctl32.libincludelib comdlg32.libDLG_MAIN equ 1.data?hInstance dd szBuffer db 256 dup _ ProcDlgMain PROTO (?): DWORD,: DWORD,: DWORD,: DWORD.data .code; ******************************************************** ************* _ ProCDLGMain Proc Uses EBX EDI ESI, / HWND: DWORD, WMSG: DWORD, WPARAM: DWORD, LPARAM: DWORDMOV EAX, WMSG.IF EAX == WM_CLOSEinvoke EndDialog, hWnd, NULL.elseif eax == WM_INITDIALOG.elseif eax == WM_COMMANDmov eax, wParam.if eax == IDOKinvoke EndDialog, hWnd, NULL.elseif eax == IDCANCELinvoke EndDialog, hWnd, NULL.endif.elsemov eax , Falseret.Endif Mov EAX, TRUERET_PROCDLGMAIN ENDP; ****************************************** ************************************ Start: Invoke InitcommonControlsInvoke GetModuleHandle, Nullmov Hinstance, EaxInvoke DialogBoxParam, Hinstance, DLG_MAIN, NULL, OFFSET _PROCDLGMAIN, 0INVOKE EXITPROCDLGMAIN, 0INVOKE EXITPROCDLGMAIN, 0INVOKE EXITPROCDLGMAIN, 0INVOKE EXITPROCDLGMAIN, 0INVOKE EXITPROCDLGMAIN, 0INVOKE EXITPROCDLGMAIN, NULLEND Start After reading the most statement here, I will explain a few new statements: _PrOcdlgmain Proto: DWORD, DWORD,: DWORD,: DWORDPROTO statement is similar to the function definition in the C language, in the Win32 assembly, if the subroutine is defined after reference, you must define, of course, this definition is for the Invoke statement and other band parameters. Call, if your subroutine does not have a parameter, you can use the CALL instruction to call it instead of using the macro invoke, you don't have to declare this function. _PROCDLGMAIN Proc Uses EBX EDI ESI, / HWND: DWORD, WMSG: DWORD: DWORD, DWORD, LPARAM: DWORD This definition proc's statement should be unfamiliar, to repeat the Uses and the following parameters, registers under Uses Indicates that the compiler is automatically inserted to save and restore these registers, and the symbols of the row in the Masm32, indicating that the next line is the continuation of the Bank to avoid the content of the line.