This example is composed of three files:
This example is composed of three files:
//============================================================================= //RESOURCES: STRINGTABLES - Copyright © 2000,2005 Ken Fitlike //============================================================================= //API functions used: DialogBox,EndDialog,GetLastError,GetModuleHandle, //LoadImage,LoadString,MAKEINTRESOURCE,MessageBox,PostMessage,SendMessage, //WinMain. //============================================================================= //This demonstrates a STRINGTABLE resource. //============================================================================= #include <windows.h> //include all the basics #include <tchar.h> //string and other mapping macros #include <string> #include "resources.h" //define an unicode string type alias typedef std::basic_string<TCHAR> ustring; //============================================================================= //message processing function declarations INT_PTR CALLBACK DlgProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); void OnCommand(const HWND,int,int,const HWND); INT_PTR OnInitDlg(const HWND,LPARAM); //non-message function declarations inline int ErrMsg(const ustring&); //============================================================================= int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int) { INT_PTR success=DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),0,DlgProc); if (success==-1) { ErrMsg(_T("DialogBox failed.")); } return 0; } //============================================================================= INT_PTR CALLBACK DlgProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_COMMAND: { OnCommand(hwnd,LOWORD(wParam),HIWORD(wParam), reinterpret_cast<HWND>(lParam)); return 0; } case WM_INITDIALOG: { return OnInitDlg(hwnd,lParam); } default: return FALSE; //let system deal with msg } } //============================================================================= void OnCommand(const HWND hwnd,int id,int notifycode,const HWND hCntrl) { //handles WM_COMMAND message of the modal dialogbox switch (id) { case IDOK: //RETURN key pressed or 'ok' button selected case IDCANCEL: //ESC key pressed or 'cancel' button selected EndDialog(hwnd,id); } } //============================================================================= INT_PTR OnInitDlg(const HWND hwnd,LPARAM lParam) { //set the small icon for the dialog. IDI_APPLICATION icon is set by default //for winxp SendMessage(hwnd,WM_SETICON,ICON_SMALL, reinterpret_cast<LPARAM>(LoadImage(0,IDI_APPLICATION,IMAGE_ICON, 0,0,LR_SHARED))); //load strings from resource stringtable and add them to listbox HWND hList=GetDlgItem(hwnd,IDC_LISTBOX); const int MAX_STR_LEN=256; TCHAR txt[MAX_STR_LEN]; for (int i=IDS_STRING1;i<=IDS_STRING8;++i) { LoadString(GetModuleHandle(0),i,txt,MAX_STR_LEN-1); SendMessage(hList,LB_ADDSTRING,0,reinterpret_cast<LPARAM>(txt)); } //ensure focus rectangle is properly draw around control with focus PostMessage(hwnd,WM_KEYDOWN,VK_TAB,0); return TRUE; } //============================================================================= inline int ErrMsg(const ustring& s) { return MessageBox(0,s.c_str(),_T("ERROR"),MB_OK|MB_ICONEXCLAMATION); } //=============================================================================
//============================================================================= //Resource script constants for Resources: Stringtable example. //============================================================================= #define IDD_DIALOG1 200 #define IDC_LISTBOX 300 #define IDS_STRING1 400 #define IDS_STRING2 401 #define IDS_STRING3 402 #define IDS_STRING4 403 #define IDS_STRING5 404 #define IDS_STRING6 405 #define IDS_STRING7 406 #define IDS_STRING8 407
//============================================================================= //RESOURCES: STRINGTABLE - Copyright (c) 2000,2005 Ken Fitlike //resource script //============================================================================= #if !defined __BORLANDC__ #include <afxres.h> #endif #include "resources.h" //============================================================================= //Resource languages: Codes for languages and sub-languages are declared in //winnt.h eg. for US english replace SUBLANG_ENGLISH_UK with SUBLANG_ENGLISH_US //eg. for FRENCH replace LANG_ENGLISH with LANG_FRENCH and then replace //SUBLANG_ENGLISH_UK with either SUBLANG_FRENCH,SUBLANG_FRENCH_BELGIAN, //SUBLANG_FRENCH_CANADIAN,SUBLANG_FRENCH_SWISS,SUBLANG_FRENCH_LUXEMBOURG, //SUBLANG_FRENCH_MONACO depending on which national or regional variation of //the language corresponds best with your requirements. // LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK //============================================================================= //Dialog //============================================================================= IDD_DIALOG1 DIALOGEX 0, 0, 252, 149 STYLE DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "Resources: Stringtables" FONT 8, "MS Sans Serif" { LISTBOX IDC_LISTBOX,30,10,190,100 DEFPUSHBUTTON "OK",IDOK,22,122,50,14 PUSHBUTTON "Cancel",IDCANCEL,181,122,50,14 } //============================================================================= //Stringtable //============================================================================= STRINGTABLE { IDS_STRING1 "Black" IDS_STRING2 "White" IDS_STRING3 "Red" IDS_STRING4 "Green" IDS_STRING5 "Blue" IDS_STRING6 "Yellow" IDS_STRING7 "Orange" IDS_STRING8 "Purple" } //=============================================================================