WS_SAWER
Гость
|
|
« : 25-11-2009 17:25 » |
|
Сделал прог раммуу, которая рисует график. К ней надо приделать ввод данных так чтобы данные вводились во время работы прог раммы, желательно в другом окне или меню, или вообще хоть как-то. #include <windows.h> #include <iostream.h> #include <math.h> #define ID_FIRSTCHILD 100 #define ID_SECONDCHILD 101 #define ID_THIRDCHILD 102 #define Pi 3.14159265 //--------------------------------------------------------------------------- //Dannie //---------------------------------------------------------------------------
double shag=1; double xx=2; double x1=-5; double x2=5; double x3=x2-x1; double kolshag=x3/shag; int mnogitel=1; double udef; bool flag=true;
//--------------------------------------------------------------------------- //часть 1 - окно //---------------------------------------------------------------------------
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); void DrawDiagram(HWND hWnd, HDC hdc, int offset);
//--------------------------------------------------------------------------- int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //--------------------------------------------------------------------------- HWND hWnd; MSG msg; WNDCLASS wcex; //--------------------------------------------------------------------------- //wcex.cbSize = sizeof(WNDCLASS); //размер структуры wcex.style = CS_HREDRAW | CS_VREDRAW; //задаем стиль окна, подробнее смотрите в MSDN wcex.lpfnWndProc = (WNDPROC)WindowProcedure; //указываем оконную процедуру wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; //указываем дескриптор приложениея wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); //устанавливаем иконку приложения по умолчанию wcex.hCursor = LoadCursor(NULL, IDC_ARROW); //устанавливаем курсор по умолчанию wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //задаем цвет окна wcex.lpszMenuName = NULL; //меню окна - нет меню wcex.lpszClassName = szWindowClass; //указываем класс окна //wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); //загружаем иконку окна RegisterClass ( &wcex ); // регистрируем класс окна NULL);
hWnd = CreateWindow( szWindowClass, // имя класса окна szTitle, // заголовок окна WS_OVERLAPPEDWINDOW, // стиль окна CW_USEDEFAULT, // начальная Х-координата окна (или введите значение) CW_USEDEFAULT, // начальная У-координата окна (или введите значение) CW_USEDEFAULT, // начальный горизонтальный размер(или введите значение) CW_USEDEFAULT, // начальный вертикальный размер (или введите значение) NULL, // дескриптор родительского окна NULL, hInstance, // дескриптор экземпляра программы NULL); // параметры создания if(!hWnd) {
MessageBox(hWnd, "Ошибка создания окна", "Ошибка", IDI_ERROR || MB_OK); //в случае чего - говорим об ошибке return 1; }
RECT rcClient; //--------------------------------------------------------------------------- ShowWindow( hWnd , nCmdShow ); // отобразить окно на экране UpdateWindow( hWnd ); // вывести на экран рабочую область окна. //--------------------------------------------------------------------------- while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } //--------------------------------------------------------------------------- LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; //структура для рисования HDC hdc; //дескриптор устройства (монитор) RECT rect; //область, где рисовать static int offset = 0; //смещение для синусоиды SetTimer(hWnd, 1, 3000, NULL); //устанавливаем таймер обновления рисунка switch (message) //обрабатываем сообщения ос {
case WM_TIMER: // если сообщение - сработал таймер, то... GetClientRect(hWnd, &rect); //получаем рабочую область InvalidateRect(hWnd, &rect, true); //объявляем ее недействительной UpdateWindow(hWnd); //перерисовываем окно return 0; case WM_PAINT: // если сообщение - перерисовать окно, то... hdc = BeginPaint(hWnd, &ps); //получаем дескриптор устройства DrawDiagram(hWnd, hdc, offset); //рисуем синусоиду EndPaint(hWnd, &ps); //заканчиваем рисование return 0; case WM_DESTROY: // если сообщение - уничтожить окно, то... PostQuitMessage(0); //посылаем "прощальное" сообщение операционке return 0; default: return DefWindowProc(hWnd, message, wParam, lParam); //обработка всех других сообщений } return 0; } //--------------------------------------------------------------------------- //часть2 //---------------------------------------------------------------------------
void DrawDiagram(HWND hWnd, HDC hdc, int offset) { RECT rect; GetClientRect(hWnd, &rect); GetLastError; const int xVE = rect.right - rect.left; const int yVE = rect.bottom - rect.top; //double nPixPerVolt = yVE / 1000.0; //у е //double nPixPerMs = xVE / 680.0; //у е //--------------------------------------------------------------------------- int xmin=0; int xmax=xVE+56; int ymin=-yVE/2; int ymax=yVE/2;
double u; double xd=x3/xmax; u=xx * cos(xx*xd /* radianPerx * */+xx*x1); if(!udef) udef=u; double yd=(ymax-ymin)/2; //*yd;
//--------------------------------------------------------------------------- SetMapMode(hdc, MM_ISOTROPIC); SetWindowExtEx(hdc, xVE+200, yVE+100, NULL); SetViewportExtEx(hdc, xVE+56, -yVE, NULL); //ctnrf SetViewportOrgEx(hdc, 40.0, yVE/2, NULL); //--------------------------------------------------------------------------- char* xMark[]={"1234", "1234", "1234", "1234", "1234","1234", "1234", "1234", "1234", "1234","1234", "1234", "1234", "1234", "1234","1234", "1234", "1234", "1234", "1234","1234", "1234", "1234", "1234", "1234"}; char* yMark[] = {" -5 "," -4 ", " -3 ", " -2 ", " -1 ", " 0", " 1", " 2", " 3", " 4"," 5"," 6"};
double perem3=0,perem2=0; int perem1=0, perem=0; double x1def=x1;
if(flag) while(x1def<=x2) { sprintf(xMark[perem],"%f",x1def); perem++; x1def=x1def+shag; flag=false; } //--------------------------------------------------------------------------- perem2=shag*mnogitel/5; perem3=udef-shag*mnogitel;
while(perem1<=10) { sprintf(yMark[perem1],"%f",perem3); perem1++; perem3+=perem2; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- HPEN hPen1 = CreatePen(PS_SOLID, 1, RGB(200, 200, 200)); SelectObject(hdc, hPen1);
int x=xmin, xshag=xmax/kolshag; int y=ymin, yshag=(ymax-ymin)/10;
for(int i = 0; i <= kolshag; ++i) { TextOut(hdc, xmin-40, y+8, yMark[i], sizeof(yMark[i])); TextOut(hdc, x+4, -8, xMark[i], sizeof(xMark[i])); MoveToEx(hdc, x, ymin, NULL); //перемещаемся в заданную точку LineTo(hdc, x, ymax); //рисуем туда линию MoveToEx(hdc, xmin, y, NULL); //перемещаемся в заданную точку LineTo(hdc, xmax, y); //рисуем туда линию x=x+xshag; y=y+yshag; } //--------------------------------------------------------------------------- HPEN hPen0 = CreatePen(PS_SOLID, 3, RGB(0, 160, 0)); HPEN hOldPen = (HPEN)SelectObject(hdc, hPen0); MoveToEx(hdc, xmin, ymin, NULL); //перемещаемся в заданную точку LineTo(hdc, xmin, ymax); //рисуем туда линию MoveToEx(hdc, xmin, 0, NULL); //перемещаемся в заданную точку LineTo(hdc, xmax, 0); //рисуем туда линию //--------------------------------------------------------------------------- //формула и вывод //--------------------------------------------------------------------------- HPEN hPen2 = CreatePen(PS_SOLID, 3, RGB(200, 50, 50)); SelectObject(hdc, hPen2);
int tStep = 1; //задаем шаг графика //double radianPerx = 180 / Pi ; //вычисляем угол радиан (1-udef)/(shag*mnogitel) int h=0; double uravnoves=(shag*mnogitel); MoveToEx(hdc, 0, ((u-udef)/ uravnoves )* yd, NULL); //вычисляем начальную точку while( h <= xmax) //до достижения максимального значения х графика { h += tStep; u = (xx * cos(xx*h*xd /* radianPerx * */+xx*x1)); //вычисляем косинус LineTo(hdc, h , ((u-udef)/ uravnoves )* yd+0 ); //рисуем линию if(u<(udef-shag*mnogitel)||(u>udef+shag*mnogitel)) { if(u>udef+shag*mnogitel) udef+=shag*mnogitel; else udef-=shag*mnogitel+0; mnogitel*=2; h=xmax+1; } } } //---------------------------------------------------------------------------
Нужен ввод shag, x1, x2, xx Подскажите, плз, как делать. Хотяб какими функциями или как. Пробовал инпатбоксом, нормально он не работал, либо не было возможности передать значение функции. Пробовал меню, дочерние окна, другие окна, ничего не получилось(
|
|
« Последнее редактирование: 29-11-2009 08:16 от Sel »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 25-11-2009 17:55 » |
|
Пробовал меню, дочерние окна, другие окна, ничего не получилось(
покажи, как пробовал. Именно дочерние окна, а именно EDIT
|
|
|
Записан
|
|
|
|
WS_SAWER
Гость
|
|
« Ответ #2 : 25-11-2009 18:58 » |
|
Как тогда делал показать не могу, но вот то что сейчас получилось #include <windows.h> #include <iostream.h> #include <math.h> #define ID_FIRSTCHILD 100 #define ID_SECONDCHILD 101 #define ID_THIRDCHILD 102 #define Pi 3.14159265 //--------------------------------------------------------------------------- //Dannie BOOL CALLBACK EnumChildProc(hwndChild, lParam) HWND hwndChild; LPARAM lParam; { LPRECT rcParent; int i, idChild; // Âîññòàíîâëåíèå èäåíòèôèêàòîðà äî÷åðíåãî îêíà. // Èñïîëüçîâàòü åãî äëÿ óñòàíîâêè äî÷åðíåãî îêíà. idChild = GetWindowLong(hwndChild, GWL_ID); if (idChild == ID_FIRSTCHILD) i = 0; else if (idChild == ID_SECONDCHILD) i = 1; else i = 2; // Ðàçìåð è ïîçèöèÿ äî÷åðíåãî îêíà. rcParent = (LPRECT) lParam; MoveWindow(hwndChild, (rcParent->right / 3) * i,0, rcParent->right / 3,rcParent->bottom,TRUE); // Óäîñòîâåðèòåñü, ÷òî äî÷åðíåå îêíî âèäèìî ShowWindow(hwndChild, SW_SHOW); return TRUE; } //---------------------------------------------------------------------------
double shag=1; double xx=2; double x1=-5; double x2=5; double x3=x2-x1; double kolshag=x3/shag; int mnogitel=1; double udef; bool flag=true; char charsym;
//---------------------------------------------------------------------------
//--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //îñíîâíàÿ ÷àñòü ïðîãðàììû //÷àñòü 1 - îêíî //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); void DrawDiagram(HWND hWnd, HDC hdc, int offset);
//--------------------------------------------------------------------------- TCHAR szTitle[] = "×åðòèëêà"; TCHAR szWindowClass[] = "chert"; //--------------------------------------------------------------------------- //function CreateMenu( hMenu, SubMenu: HMENU; Cap: PChar; _uID, _wID: UINT; Sep: boolean ): boolean; // hMenu - ìåíþ, â êîòîðîå äîáàâëÿåòñÿ íîâûé ïóíêò // SubMenu - ñâÿçàííîå ñ ýòèì ïóíêòîì ïîäìåíþ (åñëè îíî åñòü) // Cap - çàãîëîâîê íîâîãî ïóíêòà // _uID - âñåãäà 0 (ýòîò ïàðàìåòð èñïîëüçóåòñÿ â ôóíêöèè InsertMenuItem) // _wID - èäåíòèôèêàòîð, ñâÿçàííûé ñ äàííûì ïóíêòîì // Sep - ïðèçíàê, ÿâëÿåòñÿ ëè íîâûé ïóíêò ðàçäåëèòåëåì èëè íåò //var // Mi: MENUITEMINFO; //ýòó ñòðóêòóðó íóæíî èíèöèàëèçèðîâàòü äëÿ ñîçäàíèÿ ìåíþ
//--------------------------------------------------------------------------- int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //---------------------------------------------------------------------------
HWND hWnd; MSG msg; WNDCLASS wcex; //--------------------------------------------------------------------------- //wcex.cbSize = sizeof(WNDCLASS); //ðàçìåð ñòðóêòóðû wcex.style = CS_HREDRAW | CS_VREDRAW; //çàäàåì ñòèëü îêíà, ïîäðîáíåå ñìîòðèòå â MSDN wcex.lpfnWndProc = (WNDPROC)WindowProcedure; //óêàçûâàåì îêîííóþ ïðîöåäóðó wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; //óêàçûâàåì äåñêðèïòîð ïðèëîæåíèåÿ wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); //óñòàíàâëèâàåì èêîíêó ïðèëîæåíèÿ ïî óìîë÷àíèþ wcex.hCursor = LoadCursor(NULL, IDC_ARROW); //óñòàíàâëèâàåì êóðñîð ïî óìîë÷àíèþ wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //çàäàåì öâåò îêíà wcex.lpszMenuName = NULL; //ìåíþ îêíà - íåò ìåíþ wcex.lpszClassName = szWindowClass; //óêàçûâàåì êëàññ îêíà //wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); //çàãðóæàåì èêîíêó îêíà RegisterClass ( &wcex ); // ðåãèñòðèðóåì êëàññ îêíà //---------------------------------------------------------------------------
//--------------------------------------------------------------------------- //hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); hWnd = CreateWindow( szWindowClass, // èìÿ êëàññà îêíà szTitle, // çàãîëîâîê îêíà WS_OVERLAPPEDWINDOW, // ñòèëü îêíà CW_USEDEFAULT, // íà÷àëüíàÿ Õ-êîîðäèíàòà îêíà (èëè ââåäèòå çíà÷åíèå) CW_USEDEFAULT, // íà÷àëüíàÿ Ó-êîîðäèíàòà îêíà (èëè ââåäèòå çíà÷åíèå) CW_USEDEFAULT, // íà÷àëüíûé ãîðèçîíòàëüíûé ðàçìåð(èëè ââåäèòå çíà÷åíèå) CW_USEDEFAULT, // íà÷àëüíûé âåðòèêàëüíûé ðàçìåð (èëè ââåäèòå çíà÷åíèå) NULL, // äåñêðèïòîð ðîäèòåëüñêîãî îêíà NULL, // MENUITEMINFO, // äåñêðèïòîð ìåíþ îêíà - NULL - ìåíþ ïî óìîë÷àíèþ hInstance, // äåñêðèïòîð ýêçåìïëÿðà ïðîãðàììû NULL); // ïàðàìåòðû ñîçäàíèÿ for (int i = 0; i < 3; i++) CreateWindowEx(0,"ChildWClass",(LPCTSTR) NULL,WS_CHILD | WS_BORDER, 0,0,0,0,hWnd,(HMENU) (int) (ID_FIRSTCHILD + i),hInstance,NULL); return 0; if(!hWnd) {
MessageBox(hWnd, "Îøèáêà ñîçäàíèÿ îêíà", "Îøèáêà", IDI_ERROR || MB_OK); //â ñëó÷àå ÷åãî - ãîâîðèì îá îøèáêå return 1; }
RECT rcClient; //---------------------------------------------------------------------------
//--------------------------------------------------------------------------- ShowWindow( hWnd , nCmdShow ); // îòîáðàçèòü îêíî íà ýêðàíå UpdateWindow( hWnd ); // âûâåñòè íà ýêðàí ðàáî÷óþ îáëàñòü îêíà. //--------------------------------------------------------------------------- while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
return msg.wParam; }
//---------------------------------------------------------------------------
LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; //ñòðóêòóðà äëÿ ðèñîâàíèÿ HDC hdc; //äåñêðèïòîð óñòðîéñòâà (ìîíèòîð) RECT rect; //îáëàñòü, ãäå ðèñîâàòü static int offset = 0; //ñìåùåíèå äëÿ ñèíóñîèäû SetTimer(hWnd, 1, 3000, NULL); //óñòàíàâëèâàåì òàéìåð îáíîâëåíèÿ ðèñóíêà switch (message) //îáðàáàòûâàåì ñîîáùåíèÿ îñ { case WM_SIZE: // èçìåíåíèå ðàçìåðîâ îñíîâíîãî îêíà GetClientRect(hWnd, &rect); EnumChildWindows(hWnd, EnumChildProc,(LPARAM) &rect); break; case WM_TIMER: // åñëè ñîîáùåíèå - ñðàáîòàë òàéìåð, òî... GetClientRect(hWnd, &rect); //ïîëó÷àåì ðàáî÷óþ îáëàñòü InvalidateRect(hWnd, &rect, true); //îáúÿâëÿåì åå íåäåéñòâèòåëüíîé UpdateWindow(hWnd); //ïåðåðèñîâûâàåì îêíî return 0; case WM_PAINT: // åñëè ñîîáùåíèå - ïåðåðèñîâàòü îêíî, òî... hdc = BeginPaint(hWnd, &ps); //ïîëó÷àåì äåñêðèïòîð óñòðîéñòâà DrawDiagram(hWnd, hdc, offset); //ðèñóåì ñèíóñîèäó EndPaint(hWnd, &ps); //çàêàí÷èâàåì ðèñîâàíèå return 0; case WM_DESTROY: // åñëè ñîîáùåíèå - óíè÷òîæèòü îêíî, òî... PostQuitMessage(0); //ïîñûëàåì "ïðîùàëüíîå" ñîîáùåíèå îïåðàöèîíêå return 0; default: return DefWindowProc(hWnd, message, wParam, lParam); //îáðàáîòêà âñåõ äðóãèõ ñîîáùåíèé } return 0; } //--------------------------------------------------------------------------- //÷àñòü2 //---------------------------------------------------------------------------
void DrawDiagram(HWND hWnd, HDC hdc, int offset) { RECT rect; GetClientRect(hWnd, &rect); GetLastError; const int xVE = rect.right - rect.left; const int yVE = rect.bottom - rect.top; //double nPixPerVolt = yVE / 1000.0; //ó å //double nPixPerMs = xVE / 680.0; //ó å //--------------------------------------------------------------------------- int xmin=0; int xmax=xVE+56; int ymin=-yVE/2; int ymax=yVE/2;
double u; double xd=x3/xmax; u=xx * cos(xx*xd /* radianPerx * */+xx*x1); if(!udef) udef=u; double yd=(ymax-ymin)/2; //*yd;
//--------------------------------------------------------------------------- SetMapMode(hdc, MM_ISOTROPIC); SetWindowExtEx(hdc, xVE+200, yVE+100, NULL); SetViewportExtEx(hdc, xVE+56, -yVE, NULL); //ctnrf SetViewportOrgEx(hdc, 40.0, yVE/2, NULL); //--------------------------------------------------------------------------- char* xMark[]={"1234", "1234", "1234", "1234", "1234","1234", "1234", "1234", "1234", "1234","1234", "1234", "1234", "1234", "1234","1234", "1234", "1234", "1234", "1234","1234", "1234", "1234", "1234", "1234"}; char* yMark[] = {" -5 "," -4 ", " -3 ", " -2 ", " -1 ", " 0", " 1", " 2", " 3", " 4"," 5"," 6"};
double perem3=0,perem2=0; int perem1=0, perem=0; double x1def=x1;
if(flag) while(x1def<=x2) { sprintf(xMark[perem],"%f",x1def); perem++; x1def=x1def+shag; flag=false; } //--------------------------------------------------------------------------- perem2=shag*mnogitel/5; perem3=udef-shag*mnogitel;
while(perem1<=10) { sprintf(yMark[perem1],"%f",perem3); perem1++; perem3+=perem2; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- HPEN hPen1 = CreatePen(PS_SOLID, 1, RGB(200, 200, 200)); SelectObject(hdc, hPen1);
int x=xmin, xshag=xmax/kolshag; int y=ymin, yshag=(ymax-ymin)/10;
for(int i = 0; i <= kolshag; ++i) { TextOut(hdc, xmin-40, y+8, yMark[i], sizeof(yMark[i])); TextOut(hdc, x+4, -8, xMark[i], sizeof(xMark[i])); MoveToEx(hdc, x, ymin, NULL); //ïåðåìåùàåìñÿ â çàäàííóþ òî÷êó LineTo(hdc, x, ymax); //ðèñóåì òóäà ëèíèþ MoveToEx(hdc, xmin, y, NULL); //ïåðåìåùàåìñÿ â çàäàííóþ òî÷êó LineTo(hdc, xmax, y); //ðèñóåì òóäà ëèíèþ x=x+xshag; y=y+yshag; } //--------------------------------------------------------------------------- HPEN hPen0 = CreatePen(PS_SOLID, 3, RGB(0, 160, 0)); HPEN hOldPen = (HPEN)SelectObject(hdc, hPen0); MoveToEx(hdc, xmin, ymin, NULL); //ïåðåìåùàåìñÿ â çàäàííóþ òî÷êó LineTo(hdc, xmin, ymax); //ðèñóåì òóäà ëèíèþ MoveToEx(hdc, xmin, 0, NULL); //ïåðåìåùàåìñÿ â çàäàííóþ òî÷êó LineTo(hdc, xmax, 0); //ðèñóåì òóäà ëèíèþ //--------------------------------------------------------------------------- //ôîðìóëà è âûâîä //--------------------------------------------------------------------------- HPEN hPen2 = CreatePen(PS_SOLID, 3, RGB(200, 50, 50)); SelectObject(hdc, hPen2);
int tStep = 1; //çàäàåì øàã ãðàôèêà //double radianPerx = 180 / Pi ; //âû÷èñëÿåì óãîë ðàäèàí (1-udef)/(shag*mnogitel) int h=0; double uravnoves=(shag*mnogitel); MoveToEx(hdc, 0, ((u-udef)/ uravnoves )* yd, NULL); //âû÷èñëÿåì íà÷àëüíóþ òî÷êó while( h <= xmax) //äî äîñòèæåíèÿ ìàêñèìàëüíîãî çíà÷åíèÿ õ ãðàôèêà { h += tStep; u = (xx * cos(xx*h*xd /* radianPerx * */+xx*x1)); //âû÷èñëÿåì êîñèíóñ LineTo(hdc, h , ((u-udef)/ uravnoves )* yd+0 ); //ðèñóåì ëèíèþ if(u<(udef-shag*mnogitel)||(u>udef+shag*mnogitel)) { if(u>udef+shag*mnogitel) udef+=shag*mnogitel; else udef-=shag*mnogitel+0; mnogitel*=2; h=xmax+1; } } //---------------------------------------------------------------------------
}
тут хоть hInstanse распознает, но вот после switch (message) уже не идет
|
|
|
Записан
|
|
|
|
WS_SAWER
Гость
|
|
« Ответ #3 : 25-11-2009 19:16 » |
|
Не нашел кнопку редактирования. Вот измененная часть, про дочерние окна и то место где не работает // выше функция BOOL CALLBACK EnumChildProc(hwndChild, lParam)
hWnd = CreateWindow( szWindowClass, // èìÿ êëàññà îêíà szTitle, // çàãîëîâîê îêíà WS_OVERLAPPEDWINDOW, // ñòèëü îêíà CW_USEDEFAULT, // íà÷àëüíàÿ Õ-êîîðäèíàòà îêíà (èëè ââåäèòå çíà÷åíèå) CW_USEDEFAULT, // íà÷àëüíàÿ Ó-êîîðäèíàòà îêíà (èëè ââåäèòå çíà÷åíèå) CW_USEDEFAULT, // íà÷àëüíûé ãîðèçîíòàëüíûé ðàçìåð(èëè ââåäèòå çíà÷åíèå) CW_USEDEFAULT, // íà÷àëüíûé âåðòèêàëüíûé ðàçìåð (èëè ââåäèòå çíà÷åíèå) NULL, // äåñêðèïòîð ðîäèòåëüñêîãî îêíà NULL, // MENUITEMINFO, // äåñêðèïòîð ìåíþ îêíà - NULL - ìåíþ ïî óìîë÷àíèþ hInstance, // äåñêðèïòîð ýêçåìïëÿðà ïðîãðàììû NULL); // ïàðàìåòðû ñîçäàíèÿ for (int i = 0; i < 3; i++) CreateWindowEx(0,"ChildWClass",(LPCTSTR) NULL,WS_CHILD | WS_BORDER, 0,0,0,0,hWnd,(HMENU) (int) (ID_FIRSTCHILD + i),hInstance,NULL); return 0; if(!hWnd) {
MessageBox(hWnd, "Îøèáêà ñîçäàíèÿ îêíà", "Îøèáêà", IDI_ERROR || MB_OK); //â ñëó÷àå ÷åãî - ãîâîðèì îá îøèáêå return 1; }
RECT rcClient; //---------------------------------------------------------------------------
//--------------------------------------------------------------------------- ShowWindow( hWnd , nCmdShow ); // îòîáðàçèòü îêíî íà ýêðàíå UpdateWindow( hWnd ); // âûâåñòè íà ýêðàí ðàáî÷óþ îáëàñòü îêíà. //--------------------------------------------------------------------------- while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
return msg.wParam; }
//---------------------------------------------------------------------------
LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; //ñòðóêòóðà äëÿ ðèñîâàíèÿ HDC hdc; //äåñêðèïòîð óñòðîéñòâà (ìîíèòîð) RECT rect; //îáëàñòü, ãäå ðèñîâàòü static int offset = 0; //ñìåùåíèå äëÿ ñèíóñîèäû SetTimer(hWnd, 1, 3000, NULL); //óñòàíàâëèâàåì òàéìåð îáíîâëåíèÿ ðèñóíêà switch (message) //îáðàáàòûâàåì ñîîáùåíèÿ îñ { case WM_SIZE: // èçìåíåíèå ðàçìåðîâ îñíîâíîãî îêíà GetClientRect(hWnd, &rect); EnumChildWindows(hWnd, EnumChildProc,(LPARAM) &rect); break; case WM_TIMER: // åñëè ñîîáùåíèå - ñðàáîòàë òàéìåð, òî... GetClientRect(hWnd, &rect); //ïîëó÷àåì ðàáî÷óþ îáëàñòü InvalidateRect(hWnd, &rect, true); //îáúÿâëÿåì åå íåäåéñòâèòåëüíîé UpdateWindow(hWnd); //ïåðåðèñîâûâàåì îêíî return 0; case WM_PAINT: // åñëè ñîîáùåíèå - ïåðåðèñîâàòü îêíî, òî... hdc = BeginPaint(hWnd, &ps); //ïîëó÷àåì äåñêðèïòîð óñòðîéñòâà DrawDiagram(hWnd, hdc, offset); //ðèñóåì ñèíóñîèäó EndPaint(hWnd, &ps); //çàêàí÷èâàåì ðèñîâàíèå return 0; case WM_DESTROY: // åñëè ñîîáùåíèå - óíè÷òîæèòü îêíî, òî... PostQuitMessage(0); //ïîñûëàåì "ïðîùàëüíîå" ñîîáùåíèå îïåðàöèîíêå return 0; default: return DefWindowProc(hWnd, message, wParam, lParam); //îáðàáîòêà âñåõ äðóãèõ ñîîáùåíèé } return 0; }
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 25-11-2009 20:36 » |
|
WS_SAWER, думаю, в таком коде копаться мало кто станет Лучше приложи проект. И так я не увидел EDIT, поиском даже поискал ))) Ты как собрался ЦИФРЫ вводить ?
|
|
|
Записан
|
|
|
|
WS_SAWER
Гость
|
|
« Ответ #5 : 25-11-2009 20:49 » |
|
Я для начала попытался просто окно сделать, не получилось.
|
|
|
Записан
|
|
|
|
WS_SAWER
Гость
|
|
« Ответ #6 : 25-11-2009 20:57 » |
|
Мда.. я ту с форумом то кое как. В общем я совсем не давно на с++. И судя по всему, мало что понимаю. Попробую еще диалогом сделать. А как код выложить чтоб его читали?) А то на 3 форумах по 30 гдет просмотров и ни 1 ответа.
И вот еще, комментарии на русском только в 1 случае почему отобразились нормально у меня, а вот во всех остальных почему-то кракозябры, в чем дело может знаете?
|
|
« Последнее редактирование: 25-11-2009 20:59 от WS_SAWER »
|
Записан
|
|
|
|
Вад
|
|
« Ответ #7 : 25-11-2009 21:25 » |
|
Лучше всего заархивировать каталог проекта и выложить архив. Только убедись, что проект очищен от сборочных файлов, иначе будет очень много весить. А с кодировкой проблемы из-за глюка вставки (в браузере, если не ошибаюсь). Можешь попробовать копировать не сразу в форму для сообщения, а через блокнот. Точно не помню, как именно это лечится и из-за чего возникает, но что-то связанное с настройками кодировки на странице.
|
|
|
Записан
|
|
|
|
WS_SAWER
Гость
|
|
« Ответ #8 : 25-11-2009 22:00 » |
|
Вот архив. В блокноте, нотепаде тоже крокозябры, хотя кодировки все перепробовал. Мб из-за того, что на вин7, хз. Хотя было предупреждение, он писал в уникоде сохранить, но все равно не помогает
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 25-11-2009 22:28 » |
|
>>И вот еще, комментарии на русском только в 1 случае почему отобразились нормально у меня, а вот во всех остальных почему-то кракозябры, в чем дело может знаете? лечится так: перед копированием в буфер обмена убедиться, что включена русская раскладка
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 26-11-2009 04:08 » |
|
WS_SAWER, приложи проект целиком, только без папок DEBUG и RELEASE , и файл *.ncb удали
|
|
|
Записан
|
|
|
|
WS_SAWER
Гость
|
|
« Ответ #11 : 26-11-2009 07:26 » |
|
Вот все что есть. Папок DEBUG и RELEASE у меня нет вообще(кроме борландовских) и файла *.ncb тоже нет У меня это все запускается и без пары файлов.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 26-11-2009 07:36 » |
|
оказывается, это борланд. Переношу тему
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #13 : 26-11-2009 09:23 » |
|
Леш, это не Борланд, это изврат: зачем писать на Win32 API то, что уже написано давно и доступно в VCL...
WS_SAWER, почему бы не попробовать VCL компоненты - горы вопросов сразу пропадут и будет понятнее и компактнее.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|