Вот написал учебную программу! Сумел наконецто сделать так чтобы можно было писать больше одного символа но очень простым способом!
Вопрос заключается в том как улучшить работу с текстом! Мне нужно чтобы надписи можно было стерать, перенасить на другую строку, и у менй выставлено растояние между буквами 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; }
|
|