подскажите с функцией TEXT

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by rudi, 31 Aug 2010.

  1. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    487
    Likes Received:
    184
    Reputations:
    5
    начал читать книгу Рихтера "Windows для проффесионалов"
    и столкнулся с проблемой первого же примера
    компилирую на Visual Studio 2008 его код
    PHP:
    /******************************************************************************
    Module:  ErrorShow.cpp
    Notices: Copyright (c) 2000 Jeffrey Richter
    ******************************************************************************/


    #include "CmnHdr.h"     /* See Appendix A. */
    #include <Windowsx.h>
    #include <tchar.h>
    #include "Resource.h"


    ///////////////////////////////////////////////////////////////////////////////


    #define ESM_POKECODEANDLOOKUP    (WM_USER + 100)
    const TCHAR g_szAppName[] = TEXT("Error Show");


    ///////////////////////////////////////////////////////////////////////////////


    BOOL Dlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) {

       
    chSETDLGICONS(hwnd, IDI_ERRORSHOW);

       
    // Don't accept error codes more than 5 digits long
       
    Edit_LimitText(GetDlgItem(hwnd, IDC_ERRORCODE), 5);

       
    // Look up the command-line passed error number
       
    SendMessage(hwnd, ESM_POKECODEANDLOOKUP, lParam, 0);
       return(
    TRUE);
    }


    ///////////////////////////////////////////////////////////////////////////////


    void Dlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) {

       switch (
    id) {

       case 
    IDCANCEL:
          
    EndDialog(hwnd, id);
          break;

       case 
    IDC_ALWAYSONTOP:
          
    SetWindowPos(hwnd, IsDlgButtonChecked(hwnd, IDC_ALWAYSONTOP) 
             ? 
    HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
          break;

       case 
    IDC_ERRORCODE: 
          
    EnableWindow(GetDlgItem(hwnd, IDOK), Edit_GetTextLength(hwndCtl) > 0);
          break;

       case 
    IDOK:
          
    // Get the error code
          
    DWORD dwError = GetDlgItemInt(hwnd, IDC_ERRORCODE, NULL, FALSE);

          
    HLOCAL hlocal = NULL;   // Buffer that gets the error message string

          // Get the error code's textual description
          
    BOOL fOk = FormatMessage(
             
    FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, 
             
    NULL, dwError, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), 
             (
    PTSTR) &hlocal, 0, NULL);

          if (!
    fOk) {
             
    // Is it a network-related error?
             
    HMODULE hDll = LoadLibraryEx(TEXT("netmsg.dll"), NULL, 
                
    DONT_RESOLVE_DLL_REFERENCES);

             if (
    hDll != NULL) {
                
    FormatMessage(
                   
    FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM,
                   
    hDll, dwError, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
                   (
    PTSTR) &hlocal, 0, NULL);
                
    FreeLibrary(hDll);
             }
          }

          if (
    hlocal != NULL) {
             
    SetDlgItemText(hwnd, IDC_ERRORTEXT, (PCTSTR) LocalLock(hlocal));
             
    LocalFree(hlocal);
          } else {
             
    SetDlgItemText(hwnd, IDC_ERRORTEXT, TEXT("Error number not found."));
          }
          break;
       }
    }


    ///////////////////////////////////////////////////////////////////////////////


    INT_PTR WINAPI Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

       switch (
    uMsg) {
          
    chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Dlg_OnInitDialog);
          
    chHANDLE_DLGMSG(hwnd, WM_COMMAND,    Dlg_OnCommand);

       case 
    ESM_POKECODEANDLOOKUP:
          
    SetDlgItemInt(hwnd, IDC_ERRORCODE, (UINT) wParam, FALSE);
          
    FORWARD_WM_COMMAND(hwnd, IDOK, GetDlgItem(hwnd, IDOK), BN_CLICKED, 
             
    PostMessage);
          
    SetForegroundWindow(hwnd);
          break;
       }

       return(
    FALSE);
    }


    ///////////////////////////////////////////////////////////////////////////////


    int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {

       
    HWND hwnd = FindWindow(TEXT("#32770"), TEXT("Error Show"));
       if (
    IsWindow(hwnd)) {
          
    // An instance is already running, activate it and send it the new #
          
    SendMessage(hwnd, ESM_POKECODEANDLOOKUP, _ttoi(pszCmdLine), 0);
       } else {
          
    DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_ERRORSHOW), 
             
    NULL, Dlg_Proc, _ttoi(pszCmdLine));
       }
       return(
    0);
    }


    //////////////////////////////// End of File //////////////////////////////////

    и выдало ошибку:
    1>c:\temp\hh\01-errorshow\errorshow.cpp(17) : error C3861: 'TEXT': identifier not found
    вот строка на которую ругается
    const TCHAR g_szAppName[] = TEXT("Error Show");

    подскажите , чего не хватает для идентификации TEXT
     
  2. Catbert

    Catbert Banned

    Joined:
    29 Jun 2010
    Messages:
    80
    Likes Received:
    27
    Reputations:
    10
    Наверное
    #include <windows.h>
     
  3. KaE

    KaE New Member

    Joined:
    27 Sep 2009
    Messages:
    44
    Likes Received:
    1
    Reputations:
    5
    #include <winnt.h>
     
  4. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    487
    Likes Received:
    184
    Reputations:
    5
    спасибо
    помогло
    #include <windows.h>
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ну вообщето это не функция, а макрос и без него можно обойтись. он сделан чисто для лучшей переносимости
     
  6. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    487
    Likes Received:
    184
    Reputations:
    5
    я в API вообще новичок
    и я почуствовал что книга Рихтера "Windows для проффесионалов"
    для меня еще рановато
    она походу оринтирована на тех кто уже знаком с API
    ушол искать литературу для совсем новичков для API
    а уж потом вернуть к этой книге
     
  7. puaro

    puaro New Member

    Joined:
    1 Sep 2010
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Никогда не рано читать про API. Чтобы читать книгу Рихтера "Windows для проффесионалов", нужно чтобы рядом лежал "Справочник программиста С\С++" Гирберт Шилдт, тогда все будет более понятно. В справочнике описаны: функции С и С++, много всего, но так же что нужно приинклюдить. Советую вообщем!;) :cool:​
     
  8. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    правильно, правильно, опередил


    rudi и на будущее, обычно, функция не пишутся большими буквами.
     
  9. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    предполагаю ты уже знаком с языком программирования на котором будешь писать под winAPI поэтому НА

    тема что почитать новичку про winAPI избита вообще до ужоса....
     
    _________________________