Редактирование: WxWidgets FAQ Helper classes
Материал из Wiki.crossplatform.ru
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
+ | wxWidgets consists of a large group of helper classes, that help programmers to do their job. | ||
+ | These include classes for working with strings, files, xml files, streams, database or network. | ||
+ | Here we will show only a tiny drop of the whole lake. | ||
+ | wxWidgets library can be used to create console and gui applications. In this chapter, we will illustrate some of the helper classes in console based applications. | ||
+ | |||
+ | == Console == | ||
+ | This is a simple console application. The application puts some text into the console window. | ||
+ | <source lang="cpp"> | ||
+ | #include <wx/string.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | wxPuts(wxT("A wxWidgets console application")); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | A wxWidgets console application | ||
+ | </source> | ||
+ | |||
+ | == wxString == | ||
+ | This is probably the most useful class. wxString is a class representing a character string. | ||
+ | |||
+ | In the following example, we define three wxStrings. We create one string of these strings using addition operation. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <wx/string.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | wxString str1 = wxT("Linux"); | ||
+ | wxString str2 = wxT("Operating"); | ||
+ | wxString str3 = wxT("System"); | ||
+ | |||
+ | wxString str = str1 + wxT(" ") + str2 + wxT(" ") + str3; | ||
+ | |||
+ | wxPuts(str); | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | Linux Operating System | ||
+ | </source> | ||
+ | |||
+ | The Printf() method is used to format strings. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <wx/string.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | |||
+ | int flowers = 21; | ||
+ | |||
+ | wxString str; | ||
+ | str.Printf(wxT("There are %d red roses."), flowers); | ||
+ | |||
+ | wxPuts(str); | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | There are 21 red roses. | ||
+ | </source> | ||
+ | |||
+ | The following example checks, whether a string contains another string. For this we have a <i>Contains()</i> method. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <wx/string.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | |||
+ | wxString str = wxT("The history of my life"); | ||
+ | |||
+ | if (str.Contains(wxT("history"))) { | ||
+ | wxPuts(wxT("Contains!")); | ||
+ | } | ||
+ | |||
+ | |||
+ | if (!str.Contains(wxT("plain"))) { | ||
+ | wxPuts(wxT("Does not contain!")); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | Contains! | ||
+ | Does not contain! | ||
+ | </source> | ||
+ | |||
+ | The <i>Len()</i> method returns the number of characters in the string. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <wx/string.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | wxString str = wxT("The history of my life"); | ||
+ | wxPrintf(wxT("The string has %d characters\n"), str.Len()); | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | The string has 22 characters | ||
+ | </source> | ||
+ | |||
+ | The <i>MakeLower()</i> and <i>MakeUpper()</i> methods make characters lower case and upper case. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <wx/string.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | wxString str = wxT("The history of my life"); | ||
+ | |||
+ | wxPuts(str.MakeLower()); | ||
+ | wxPuts(str.MakeUpper()); | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | the history of my life | ||
+ | THE HISTORY OF MY LIFE | ||
+ | |||
+ | </source> | ||
+ | |||
+ | == Utility functions == | ||
+ | wxWidgets has several handy utility functions for executing a process, getting a home user directory or getting the OS name. | ||
+ | |||
+ | In the following example, we execute the ls command. For this, we have the wxShell() function. Unix only. | ||
+ | <source lang="cpp"> | ||
+ | #include <wx/string.h> | ||
+ | #include <wx/utils.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | |||
+ | wxShell(wxT("ls -l")); | ||
+ | |||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | total 40 | ||
+ | -rwxr-xr-x 1 vronskij vronskij 9028 2007-09-06 22:10 basic | ||
+ | -rw-r--r-- 1 vronskij vronskij 95 2007-09-06 22:09 basic.cpp | ||
+ | -rw-r--r-- 1 vronskij vronskij 430 2007-09-06 00:07 basic.cpp~ | ||
+ | -rwxr-xr-x 1 vronskij vronskij 11080 2007-09-05 23:17 console | ||
+ | -rw-r--r-- 1 vronskij vronskij 500 2007-09-05 23:17 console.cpp | ||
+ | -rw-r--r-- 1 vronskij vronskij 485 2007-09-05 23:16 console.cpp~ | ||
+ | </source> | ||
+ | |||
+ | Next we will we will get the home user directory, os name, user name, host name and total free memory. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <wx/string.h> | ||
+ | #include <wx/utils.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | wxPuts(wxGetHomeDir()); | ||
+ | wxPuts(wxGetOsDescription()); | ||
+ | wxPuts(wxGetUserName()); | ||
+ | wxPuts(wxGetFullHostName()); | ||
+ | |||
+ | long mem = wxGetFreeMemory().ToLong(); | ||
+ | |||
+ | wxPrintf(wxT("Memory: %ld\n"), mem); | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | /home/vronskij | ||
+ | Linux 2.6.20-16-generic i686 | ||
+ | jan bodnar | ||
+ | spartan | ||
+ | Memory: 741244928 | ||
+ | </source> | ||
+ | |||
+ | == Time & date == | ||
+ | |||
+ | In wxWidgets, we have several classes for working with date & time. | ||
+ | |||
+ | The example shows current date or time in various formats. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <wx/datetime.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | wxDateTime now = wxDateTime::Now(); | ||
+ | |||
+ | wxString date1 = now.Format(); | ||
+ | wxString date2 = now.Format(wxT("%X")); | ||
+ | wxString date3 = now.Format(wxT("%x")); | ||
+ | |||
+ | wxPuts(date1); | ||
+ | wxPuts(date2); | ||
+ | wxPuts(date3); | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | |||
+ | Fri Sep 7 21:28:38 2007 | ||
+ | 21:28:38 | ||
+ | 09/07/07 | ||
+ | </source> | ||
+ | |||
+ | Next we will show current time in different cities. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <wx/datetime.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | wxDateTime now = wxDateTime::Now(); | ||
+ | |||
+ | wxPrintf(wxT(" Tokyo: %s\n"), now.Format(wxT("%a %T"), | ||
+ | wxDateTime::GMT9).c_str()); | ||
+ | wxPrintf(wxT(" Moscow: %s\n"), now.Format(wxT("%a %T"), | ||
+ | wxDateTime::MSD).c_str()); | ||
+ | wxPrintf(wxT("Budapest: %s\n"), now.Format(wxT("%a %T"), | ||
+ | wxDateTime::CEST).c_str()); | ||
+ | wxPrintf(wxT(" London: %s\n"), now.Format(wxT("%a %T"), | ||
+ | wxDateTime::WEST).c_str()); | ||
+ | wxPrintf(wxT("New York: %s\n"), now.Format(wxT("%a %T"), | ||
+ | wxDateTime::EDT).c_str()); | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | Tokyo: Sat 05:42:24 | ||
+ | Moscow: Sat 00:42:24 | ||
+ | Budapest: Fri 22:42:24 | ||
+ | London: Fri 22:42:24 | ||
+ | New York: Fri 16:42:24 | ||
+ | |||
+ | </source> | ||
+ | |||
+ | The following example shows, how we can add date spans to our date/time. | ||
+ | We add one month to the current time. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | |||
+ | #include <wx/datetime.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | wxDateTime now = wxDateTime::Now(); | ||
+ | wxString date1 = now.Format(wxT("%B %d %Y")); | ||
+ | wxPuts(date1); | ||
+ | |||
+ | wxDateSpan span(0, 1); | ||
+ | wxDateTime then = now.Add(span); | ||
+ | |||
+ | wxString date2 = then.Format(wxT("%B %d %Y")); | ||
+ | wxPuts(date2); | ||
+ | |||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | September 07 2007 | ||
+ | October 07 2007 | ||
+ | |||
+ | </source> | ||
+ | |||
+ | == Files == | ||
+ | wxWidgets has several classes to facilitate working with files. This is low level access to files, as opposed to working with streams. | ||
+ | |||
+ | In the following example, we use the <b>wxFile</b> class to create a new file and write data to it. | ||
+ | We also test, whether the file is opened. Note, that when we create a file, it automatically stays as opened. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <wx/file.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | |||
+ | wxString str = wxT("You make me want to be a better man.\n"); | ||
+ | |||
+ | wxFile file; | ||
+ | file.Create(wxT("quote"), true); | ||
+ | |||
+ | if (file.IsOpened()) | ||
+ | wxPuts(wxT("the file is opened")); | ||
+ | |||
+ | file.Write(str); | ||
+ | file.Close(); | ||
+ | |||
+ | if (!file.IsOpened()) | ||
+ | wxPuts(wxT("the file is not opened")); | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | $ ls qoute | ||
+ | ls: qoute: No such file or directory | ||
+ | |||
+ | $ ./createfile | ||
+ | the file is opened | ||
+ | the file is not opened | ||
+ | |||
+ | $ cat quote | ||
+ | You make me want to be a better man. | ||
+ | |||
+ | </source> | ||
+ | |||
+ | The <b>wxTextFile</b> is a simple class which allows to work with text files on line by line basis. | ||
+ | It is easier to work with this class than with wxFile class. | ||
+ | |||
+ | In the next example, we will print the number of lines in a file, first and last lines and finally we will read and show the contents of the file. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <wx/textfile.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | |||
+ | wxTextFile file(wxT("test.c")); | ||
+ | |||
+ | file.Open(); | ||
+ | |||
+ | wxPrintf(wxT("Number of lines: %d\n"), file.GetLineCount()); | ||
+ | wxPrintf(wxT("First line: %s\n"), file.GetFirstLine().c_str()); | ||
+ | wxPrintf(wxT("Last line: %s\n"), file.GetLastLine().c_str()); | ||
+ | |||
+ | wxPuts(wxT("-------------------------------------")); | ||
+ | |||
+ | wxString s; | ||
+ | |||
+ | for ( s = file.GetFirstLine(); !file.Eof(); | ||
+ | s = file.GetNextLine() ) | ||
+ | { | ||
+ | wxPuts(s); | ||
+ | } | ||
+ | |||
+ | file.Close(); | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | Number of lines: 8 | ||
+ | First line: #include <glib.h> | ||
+ | Last line: } | ||
+ | ------------------------------------- | ||
+ | #include <glib.h> | ||
+ | #include <glib/gstdio.h> | ||
+ | |||
+ | int main() { | ||
+ | |||
+ | g_mkdir("/home/vronskij/test", S_IRWXU); | ||
+ | |||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | The <b>wxDir</b> class allows us to enumerate files and directories. | ||
+ | |||
+ | In the following example, we will print all files and directories available in the current working directory. | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <wx/dir.h> | ||
+ | |||
+ | #include <wx/filefn.h> | ||
+ | |||
+ | int main(int argc, char **argv) | ||
+ | { | ||
+ | |||
+ | wxDir dir(wxGetCwd()); | ||
+ | |||
+ | wxString file; | ||
+ | |||
+ | bool cont = dir.GetFirst(&file, wxEmptyString, | ||
+ | wxDIR_FILES | wxDIR_DIRS); | ||
+ | |||
+ | while (cont) { | ||
+ | wxPuts(file); | ||
+ | cont = dir.GetNext(&file); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | $ ./dir | ||
+ | dir | ||
+ | temp | ||
+ | console | ||
+ | basic.cpp | ||
+ | basic | ||
+ | quote | ||
+ | createfile | ||
+ | console.cpp | ||
+ | basic.cpp~ | ||
+ | test.c | ||
+ | console.cpp~ | ||
+ | </source> | ||
+ | |||
+ | [[Категория:WxWidgets]] |