Win API

Тема в разделе "WASM.BEGINNERS", создана пользователем Mark, 30 дек 2011.

  1. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    rttgedt

    Все получилось. Неправильное изъятие теста из edit'a было. Проблема тут-же образовалась. Как подсчитать количество символов в строке и добавить в конце нулевой символ?
     
  2. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    Именно оператор нужен для подсчета. Не подскажите?
     
  3. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    Если я не ошибаюсь (прочитал) это ARRAYSIZE?
    Вот с ним. Только при исполнении программы идет ошибка.




    Код (Text):
    1. char message[100];
    2.  
    3. GetDlgItemTextA(
    4.             hwnd,
    5.             ID,
    6.             message,
    7.             sizeof(message)
    8.         ); 
    9.  
    10.             int i = ARRAYSIZE(message);
    11.  
    12.             i = i + 1;
    13.  
    14.             message[i] = '\0';
     
  4. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    Короче есть строка, размером 100 ячеек. В ней сохраняется текст из текстового поля. Измеряют количество символов вроде ARRAYSIZE'ом.
    Я так понимаю у меня, если массив длинной 100 ячеек то результат измерения всегда 100?
     
  5. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
  6. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Что значит массив длинной 100 ячеек?
    Код, нужен код.
     
  7. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    Ezrah

    Вот. Из поля берется текст в буфер, создается файл, в него пишется нужный текст а потом крокозябры.

    Код (Text):
    1. char message[100];
    2.  
    3.            
    4.  
    5.             GetDlgItemTextA(
    6.                             hwnd,
    7.                             ID,
    8.                             message,
    9.                             sizeof(message)
    10.                         ); 
    11.            
    12.                           // ------------------------------Тут должен ставиться нулевой символ чтобы не записывались крокозябры.
    13.  
    14.             char f[] = {"C:\\Zametky.txt"};
    15.  
    16.             HANDLE hFile = CreateFileA(
    17.                                         f,
    18.                                         GENERIC_READ | GENERIC_WRITE,
    19.                                         FILE_SHARE_READ | FILE_SHARE_WRITE,
    20.                                         NULL,
    21.                                         CREATE_NEW,
    22.                                         FILE_ATTRIBUTE_NORMAL,
    23.                                         NULL
    24.                                         );
    25.  
    26.             WriteFile(hFile, message, ARRAYSIZE(message), &dwBytesWritten, NULL);
    27.  
    28.             CloseHandle(hFile);
     
  8. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    Ezrah

    Точнее 100 символов выделяется под строку.
     
  9. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    Ну и ничего не получается. Я так понял надо посчитать количество введенных символов в текстовое поле, плюсовать 1 и по этому индексу в ячейку буфера (в котором храниться текст из edit) записать нулевой символ. Поможете?
     
  10. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
    Почитаете? http://msdn.microsoft.com/en-us/library/windows/desktop/ms645489%28v=vs.85%29.aspx

    Код (Text):
    1. Return value
    2.  
    3. Type: UINT
    4.  
    5. If the function succeeds, the return value specifies the number of characters copied to the buffer, not including the terminating null character.
    Догадаетесь, что делать дальше?
     
  11. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    Не получилось. Сохраняется бред. (((

    Код (Text):
    1. char message[100];
    2.  
    3.             UINT p = GetDlgItemTextA(
    4.                                     hwnd,
    5.                                     ID,
    6.                                     message,
    7.                                     sizeof(message)
    8.                                    );  
    9.  
    10.          
    11.  
    12.             message[p] = '0';
     
  12. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    Kaimi

    Но нулевой символ записывается.
     
  13. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    Mark это новейшая разработка пентагона - самообучающийся ИИ :lol:
     
  14. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    moderhi

    Нулевой символ есть, нужный текст записывается, а потом весь мусор который храниться в пустых ячейках
     
  15. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    Mark
    Так дальше дело твое не пойдет. Если не научишся находить свои ошибки, то зачем это тебе все нужно?
     
  16. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    А где вы вычитали, что после 0х0 в файл не пишется. Это верно только для текстовых файлов, а по CreateFile и WriteFile тебе придется самому все обрабатывать. Батенька не издевайтесь - у вас бессистемная каша в голове. Проги иногда у вас работают не потому, что вы умный, а потому что это все придумали умные люди, чтобы тупые, но дисциплинированные индусы и китайцы могли писать Винду и иже с ней :)
     
  17. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    valterg

    Да, это я понял. Я создал доп. массив, который имеет размер по количеству введенных символов. Создал цикл, который будет крутиться столько раз, сколько символов. И там происходит это:

    Код (Text):
    1. hop[y] = message[y];
    То есть, нужные нам символы закладываются в доп массив.

    З. Ы. Вы зря думаете что я такой тупой. Я сомневаюсь, что по крайней мере из нашего класса кто-нить это понял ((

    Kaimi Спасибо за то, что подсказали про возвращаемое значение.
     
  18. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Mark, никто не говорит, что ты тупой, просто ты движешься в противоположном направлении и не хочешь слушать, что тебе говорят люди гораздо опытнее тебя
     
  19. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    Еще. Вот значит Открыл файл, сохранил содержимое в строке и вывел в текстовое поле. Файла в директории не было, а вывелся бред.

    Код:

    Код (Text):
    1. char pp[] = "Zametky.txt";
    2.    
    3.     char bufi[200];
    4.    
    5.     HANDLE yp = CreateFileA(
    6.                 pp,
    7.                 GENERIC_READ | GENERIC_WRITE,
    8.                 FILE_SHARE_READ | FILE_SHARE_WRITE,
    9.                 NULL,
    10.                 OPEN_EXISTING,
    11.                 FILE_FLAG_OVERLAPPED,
    12.                 NULL
    13.                 );
    14.                
    15.     DWORD  dwBytesRead;
    16.            
    17.     ReadFile(
    18.              yp,
    19.              bufi,
    20.              sizeof(bufi),
    21.              &dwBytesRead,  
    22.              NULL
    23.             ); 
    24.  
    25.    
    26.  
    27.  
    28.      
    29.     CloseHandle(yp);
     
  20. Mark

    Mark Марк

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    304
    Иными словами: Как мне вывести в текстовое поле содержимое файла Zametky.txt?