Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление записей в программе! 
:(
    Опции темы
dizel003
Дата 15.3.2008, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Вот написал учебную программу! Сумел наконецто сделать так чтобы можно было писать больше одного символа но очень простым способом!

Вопрос заключается в том как улучшить работу с текстом! Мне нужно чтобы надписи можно было стерать, перенасить на другую строку, и у менй выставлено растояние между буквами 8 пикселей , и если буква шерокая то она залезает на другую а если сделать большет растояние то получается некрасиво! как будто с пробелами но любая клавиша воспринимается как символ! Пожалуста подскажите как улучшить работу с текстом!


Вот работующая программа!
Код

/*Программа осуществляющая вывод на экран при оброботке сообщения WM_PAINT (Нажатие правой кнопки мыши)*/
#include<windows.h>
#include <windowsx.h>
#include <stdio.h>

LRESULT CALLBACK WindowsFunc(HWND,UINT,WPARAM,LPARAM);

char str[10];
int X=1,Y=1;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR IpszArgs,int nWinMode)
{
    char szWinName[]="MyWindow";
    char szTitle[]="1 Программа";
    MSG msg;

    WNDCLASS wc;


    ZeroMemory(&wc,sizeof(wc));

    wc.hInstance=hInstance;
    wc.lpszClassName=szWinName;
wc.lpfnWndProc=WindowsFunc;
    wc.style=0;
    wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=GetStockBrush(WHITE_BRUSH);
    wc.lpszMenuName=NULL;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;

    if(!RegisterClass(&wc))
    {        MessageBox(NULL,"Окно не регистрируется","Ошибка!",MB_OK);
        return 1;
    }

    HWND hwnd=CreateWindow(szWinName,szTitle,WS_OVERLAPPEDWINDOW,100,100,500,100,HWND_DESKTOP,NULL,hInstance,NULL);
    ShowWindow(hwnd,SW_SHOWNORMAL);

    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
        LRESULT CALLBACK WindowsFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM IParam)
        {
        
            HDC hdc;
            PAINTSTRUCT paintstruct;
            switch(message)
            {
              case WM_CHAR:
                X+=10;
                Y=1;
                hdc=GetDC(hwnd);
                sprintf (str,"%c",(char)wParam);
                TextOut(hdc,X,Y,str,strlen(str));
                ReleaseDC(hwnd,hdc);
               // InvalidateRect(hwnd,NULL,1);
                break;
            case WM_PAINT:
                hdc=BeginPaint(hwnd,&paintstruct);
                //TextOut(hdc,X,Y,str,strlen(str));
                EndPaint(hwnd,&paintstruct);
                break;
                /*Обработка правой и левой кнопки мыши*/
            case WM_RBUTTONDOWN:
                //strcpy(str,"Нажата правая кнопка");
                X=LOWORD (IParam);
                Y=HIWORD (IParam);
                InvalidateRect(hwnd,NULL,1);
                break;
           case WM_LBUTTONDOWN:
                //strcpy(str,"Нажата левая кнопка кнопка");
                X=LOWORD (IParam);
                Y=HIWORD (IParam);
                InvalidateRect(hwnd,NULL,1);
                break;

            default:

                return DefWindowProc(hwnd,message,wParam,IParam);
            }
            return 0;
        }

PM MAIL   Вверх
586
Дата 15.3.2008, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Код
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>

LRESULT CALLBACK WindowsFunc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR IpszArgs,int nWinMode)
{
    static const char szWinName[]="MyWindow";
    static const char szTitle[]="1 Программа";
    MSG msg;

    WNDCLASS wc;
    ZeroMemory(&wc,sizeof(wc));

    wc.hInstance=hInstance;
    wc.lpszClassName=szWinName;
    wc.lpfnWndProc=WindowsFunc;
    wc.style=0;
    wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=GetStockBrush(WHITE_BRUSH);
    wc.lpszMenuName=NULL;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;

    if(!RegisterClass(&wc))
    {        MessageBox(NULL,"Окно не регистрируется","Ошибка!",MB_OK);
        return 1;
    }

    HWND hwnd=CreateWindow(szWinName,szTitle,WS_OVERLAPPEDWINDOW,100,100,500,100,HWND_DESKTOP,NULL,hInstance,NULL);
    ShowWindow(hwnd,SW_SHOWNORMAL);

    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

LRESULT CALLBACK WindowsFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM IParam)
{
    HDC hdc;
    PAINTSTRUCT paintstruct;
    SIZE size;
    static int X=1,Y=1;
    char str[10];

    switch(message)
    {
      case WM_CHAR:
        //X+=10;
        Y=1;
        hdc=GetDC(hwnd);
        sprintf (str,"%c",(char)wParam);
        TextOut(hdc,X,Y,str,strlen(str));
        GetTextExtentPoint32(hdc, str, strlen(str), &size);
        X += size.cx;
        ReleaseDC(hwnd,hdc);
       // InvalidateRect(hwnd,NULL,1);
        break;
    case WM_PAINT:
        hdc=BeginPaint(hwnd,&paintstruct);
        //TextOut(hdc,X,Y,str,strlen(str));
        EndPaint(hwnd,&paintstruct);
        break;
        /*Обработка правой и левой кнопки мыши*/
    case WM_RBUTTONDOWN:
        //strcpy(str,"Нажата правая кнопка");
        X=LOWORD (IParam);
        Y=HIWORD (IParam);
        InvalidateRect(hwnd,NULL,1);
        break;
   case WM_LBUTTONDOWN:
        //strcpy(str,"Нажата левая кнопка кнопка");
        X=LOWORD (IParam);
        Y=HIWORD (IParam);
        InvalidateRect(hwnd,NULL,1);
        break;

   case WM_DESTROY:
       PostQuitMessage(0);
       break;

    default:

        return DefWindowProc(hwnd,message,wParam,IParam);
    }
    return 0;
}

PM   Вверх
dizel003
Дата 15.3.2008, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Спасибо большое! а как стерать при нажатии на делит например или на BACKSPACE и как сделать так чтобы при нажатии на ENTER перенасилась на другую строчку?
PM MAIL   Вверх
586
Дата 15.3.2008, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Цитата(dizel003 @  15.3.2008,  19:54 Найти цитируемый пост)
 а как стерать при нажатии на делит например или на BACKSPACE и как сделать так чтобы при нажатии на ENTER перенасилась на другую строчку? 

Если ты хочешь написать текстовый редактор, то тебе необходимо завести буффер, где будет храниться текст (в MSDN даже где-то был подобный пример, надо только поискать). Без этого backspace реализовать не получится, т.к. неизвестна длина текста, и что там за текст. Насчет enter, перенос строки в Windows далается так: "\r\n".
PS Можно сделать хитро, как в Paint'е, положить прозрачный edit и редактировать его.
PM   Вверх
dizel003
Дата 16.3.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Цитата(586 @ 15.3.2008,  20:13)
Цитата(dizel003 @  15.3.2008,  19:54 Найти цитируемый пост)
 а как стерать при нажатии на делит например или на BACKSPACE и как сделать так чтобы при нажатии на ENTER перенасилась на другую строчку? 

Если ты хочешь написать текстовый редактор, то тебе необходимо завести буффер, где будет храниться текст (в MSDN даже где-то был подобный пример, надо только поискать). Без этого backspace реализовать не получится, т.к. неизвестна длина текста, и что там за текст. Насчет enter, перенос строки в Windows далается так: "\r\n".
PS Можно сделать хитро, как в Paint'е, положить прозрачный edit и редактировать его.

Подскажите пожалуста где можно найти текстовый редактор! Может вы знаете название книг где это все подробно описывается... 


И ещё хотел спросить вот сделал меню! Как сделать так чтобы при нажатии на кнопку можно былобы сохранять написанное в файл к примеру в формате .txt?????????
PM MAIL   Вверх
T0ohtik
Дата 16.3.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: 1
Всего: 1



Для этого используй функцию BOOL GetSaveFileName(LPOPENFILENAME lpofn);
PM MAIL   Вверх
dizel003
Дата 16.3.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Цитата(T0ohtik @ 16.3.2008,  11:07)
Для этого используй функцию BOOL GetSaveFileName(LPOPENFILENAME lpofn);

Просто прописать в программе эту функцию и все?

PM MAIL   Вверх
T0ohtik
Дата 16.3.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: 1
Всего: 1



А MSDN для кого придумали. Не просто  вставить не получится. Одим из параметров этой функции является структура. Эту структуру надо заполнить
Код

        OPENFILENAME ofn = {0};
                TCHAR  lpstrFile[MAX_PATH+1];
                TCHAR filter[]=_T("*.txt\0*.txt\0");
                        ofn.lStructSize = sizeof(ofn);
        ofn.lpstrFile = lpstrFile;
        ofn.hwndOwner = hWnd;
        ofn.hInstance = hInst;
        ofn.lpstrFile[0] = '\0'; 
        ofn.nMaxFile = MAX_PATH+1; 
        ofn.lpstrFilter = filter; 
        ofn.nFilterIndex = 1; 
        ofn.lpstrFileTitle = NULL; 
        ofn.nMaxFileTitle = 0; 
        ofn.lpstrDefExt=_T("txt");    
        GetSaveFileName(&ofn);

PM MAIL   Вверх
dizel003
Дата 16.3.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Спасибо большое!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1102 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.