подскажите с функцией 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 hwndHWND hwndFocusLPARAM lParam) {

       
    chSETDLGICONS(hwndIDI_ERRORSHOW);

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

       
    // Look up the command-line passed error number
       
    SendMessage(hwndESM_POKECODEANDLOOKUPlParam0);
       return(
    TRUE);
    }


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


    void Dlg_OnCommand(HWND hwndint idHWND hwndCtlUINT codeNotify) {

       switch (
    id) {

       case 
    IDCANCEL:
          
    EndDialog(hwndid);
          break;

       case 
    IDC_ALWAYSONTOP:
          
    SetWindowPos(hwndIsDlgButtonChecked(hwndIDC_ALWAYSONTOP
             ? 
    HWND_TOPMOST HWND_NOTOPMOST0000SWP_NOMOVE SWP_NOSIZE);
          break;

       case 
    IDC_ERRORCODE
          
    EnableWindow(GetDlgItem(hwndIDOK), Edit_GetTextLength(hwndCtl) > 0);
          break;

       case 
    IDOK:
          
    // Get the error code
          
    DWORD dwError GetDlgItemInt(hwndIDC_ERRORCODENULLFALSE);

          
    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
             
    NULLdwErrorMAKELANGID(LANG_ENGLISHSUBLANG_ENGLISH_US), 
             (
    PTSTR) &hlocal0NULL);

          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,
                   
    hDlldwErrorMAKELANGID(LANG_ENGLISHSUBLANG_ENGLISH_US),
                   (
    PTSTR) &hlocal0NULL);
                
    FreeLibrary(hDll);
             }
          }

          if (
    hlocal != NULL) {
             
    SetDlgItemText(hwndIDC_ERRORTEXT, (PCTSTRLocalLock(hlocal));
             
    LocalFree(hlocal);
          } else {
             
    SetDlgItemText(hwndIDC_ERRORTEXTTEXT("Error number not found."));
          }
          break;
       }
    }


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


    INT_PTR WINAPI Dlg_Proc(HWND hwndUINT uMsgWPARAM wParamLPARAM lParam) {

       switch (
    uMsg) {
          
    chHANDLE_DLGMSG(hwndWM_INITDIALOGDlg_OnInitDialog);
          
    chHANDLE_DLGMSG(hwndWM_COMMAND,    Dlg_OnCommand);

       case 
    ESM_POKECODEANDLOOKUP:
          
    SetDlgItemInt(hwndIDC_ERRORCODE, (UINTwParamFALSE);
          
    FORWARD_WM_COMMAND(hwndIDOKGetDlgItem(hwndIDOK), BN_CLICKED
             
    PostMessage);
          
    SetForegroundWindow(hwnd);
          break;
       }

       return(
    FALSE);
    }


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


    int WINAPI _tWinMain(HINSTANCE hinstExeHINSTANCEPTSTR pszCmdLineint) {

       
    HWND hwnd FindWindow(TEXT("#32770"), TEXT("Error Show"));
       if (
    IsWindow(hwnd)) {
          
    // An instance is already running, activate it and send it the new #
          
    SendMessage(hwndESM_POKECODEANDLOOKUP_ttoi(pszCmdLine), 0);
       } else {
          
    DialogBoxParam(hinstExeMAKEINTRESOURCE(IDD_ERRORSHOW), 
             
    NULLDlg_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 избита вообще до ужоса....
     
    _________________________