C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
помогите разобраться с winapi
warlocklex
Отправлено: 16.01.2006, 23:52


Не зарегистрирован







Мне нужно написать на winapi прогу типа «подсчет и-нет трафика» по dial-up.Куча вопросов появилась:
1)
2)Т.к я подключаюсь через модем то в MSDN говорят для модемов определения подключения используют функцию InternetDial. Ещё есть вот эта функция InternetCheckConnection() подобных много, а какаю мне лучше?
3)
4) как вывести на экран текст я знаю(DrawText(hDC,"текст", -1,&Rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);) а как выводить изменяющее время или трафик с каждой секундой? Надо обрабатывать запрос каждую секунду.
HDC hDC;PAINTSTRUCT PaintStruct;RECT Rect;
Вставляю в WM_TIMER
hDC = BeginPaint(hwnd,&PaintStruct);
GetClientRect(hwnd,&Rect);
DrawText (hDC,"показать", -1,&Rect,DT_LEFT);
EndPaint(hwnd,&PaintStruct);

Так он вообще не выводит,ни как!таймер такой SetTimer(hwnd, 1, 100, NULL); Пишу до while(GetMessage(&msg,NULL,0,0))

5) во мне нужно что бы после того как я ввел строку в файл курсор передвигался на начало следующе!
использую WriteFile(HANDLE,,,,NULL).
6) какой конвертировать и во что, что бы вывести в файл и вывести на экран
Grigoriy
Отправлено: 17.01.2006, 01:17


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE
HDC hDC;PAINTSTRUCT PaintStruct;RECT Rect;
Вставляю в WM_TIMER
hDC = BeginPaint(hwnd,&PaintStruct);
GetClientRect(hwnd,&Rect);
DrawText (hDC,"показать", -1,&Rect,DT_LEFT);
EndPaint(hwnd,&PaintStruct);


Ничего не могу предположить конкретно, поскольку в программе присутствуют другие операторы, которые не отображены.
QUOTE

5) во мне нужно что бы после того как я ввел строку в файл курсор передвигался на начало следующе!
использую WriteFile(HANDLE,,,,NULL).
6) какой конвертировать и во что, что бы вывести в файл и вывести на экран


А приложение оконное или консольное ?
Grigoriy
Отправлено: 17.01.2006, 02:44


Мастер участка

Группа: Участник
Сообщений: 381



Метод первый

CODE

HWND hwnd;HDC hDC;RECT Rect;
//..............
char mes11[9]="показать\0";//наша строка с завершающимся нулём
hDC = GetDC(hwnd);//получить контекст устройства
Rect=GetClientRect(hwnd,&Rect);//получить размер клиентской области
DrawTextA(hDC,mes11,-1,&Rect,DT_LEFT);//выводим текст
ReleaseDC(hwnd,hDC);//освобождаем контекст устройства

Только я не понимаю в какой среде программирования вы составляете программу. Если в C++, то там функция GetClientRect принадлежит объекту-форме и не имеет параметров. Как от туда вызвать API-функцию GetClientRect, я не знаю

Метод второй.
CODE

HWND hwnd;HDC hDC;int X1;int Y1;
X1=100;Y1=100;
//..............
char mes11[9]="показать\0";//наша строка с завершающимся нулём
hDC = GetDC(hwnd);//получить контекст устройства
TextOutA(hDC,X1,Y1,mes11,8);//выводим текст от точки (X1,Y1)
ReleaseDC(hwnd,hDC);//освобождаем контекст устройства


Guest
Отправлено: 18.01.2006, 10:13


Не зарегистрирован







весь код:
CODE

#include <windows.h>
#include  <intshcut.h>
#include  <Wininet.h>
#include  <ras.h>
#include <stdio.h>
LRESULT CALLBACK HelloWorldWndProc ( HWND, UINT, UINT, LONG );

void zapiz(char* cTexBuffer)
{

char cBuffer[0x400];
HANDLE hFile;DWORD dwBytes;

hFile=CreateFile("traffic.log",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE)
  {
   MessageBox(NULL, "íåñîçäàë", "ÂÍÈÌÀÍÈÅ", NULL);
  }
SetFilePointer(hFile,0,0,FILE_END);
WriteFile(hFile,cTexBuffer,40,&dwBytes,NULL);
/* for(int i=0;i<sizeof(cTexBuffer);i++){cTexBuffer[i]=0;};
MessageBox(NULL,cTexBuffer, "ÂÍÈÌÀÍÈÅ", NULL);*/
CloseHandle(hFile);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevlnstance,LPSTR IpszCmdParam,int nCmdShow )
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[] ="HELLO WORLD";

WndClass.style=CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc=HelloWorldWndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon (NULL,IDI_APPLICATION);
WndClass.hCursor=LoadCursor (NULL, IDC_ARROW);
WndClass.hbrBackground=(HBRUSH) GetStockObject (WHITE_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = szClassName;
RegisterClass(&WndClass);
hWnd=CreateWindow(szClassName, "òåñòåð 1", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance, NULL);
/* Show our window */
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
SetTimer(hWnd,1,2000,NULL);
while(GetMessage(&Msg, NULL, 0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
KillTimer(hWnd,1);
return Msg.lParam;
}

LRESULT CALLBACK HelloWorldWndProc(HWND hWnd,UINT Message,UINT wParam,LONG lParam)
{
HDC hDC;  DWORD ASI; char* sim; int qwe=12;
PAINTSTRUCT PaintStruct;
RECT Rect; SYSTEMTIME st;
   GetLocalTime(&st);

switch(Message)
{
/*case WM_TIMER:
  if(Message==WM_PAINT) {
hDC = BeginPaint(hWnd,&PaintStruct);
GetClientRect(hWnd,&Rect);
DrawText(hDC,sim, -1,&Rect,DT_LEFT);
EndPaint(hWnd,&PaintStruct); }
     break;*/
case WM_PAINT:
//sim="sim";
_ui64toa(qwe,sim,2);//-тут ошибку выдает при запуске
hDC = BeginPaint(hWnd,&PaintStruct);
GetClientRect(hWnd,&Rect);
DrawText(hDC,sim, -1,&Rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hWnd,&PaintStruct);
return 0;
case WM_DESTROY:
          GetLocalTime(&st);
          _ltoa(st.wMinute,sim,2);//-тут ошибку выдает при запуске
          zapiz(sim);
                PostQuitMessage(0);
                return 0;
}

return DefWindowProc(hWnd,Message,wParam,lParam);
}


Отредактировано Gedeon — 18/01/2006, 13:25
icewolf
Отправлено: 19.01.2006, 10:19


Не зарегистрирован







какой функцией определить трафик входящий,если я использую модем?
Guest
Отправлено: 20.01.2006, 04:11


Не зарегистрирован







RAS_STATS r_stat;HRASCONN hRasCon;cInByte[BUFSIZE]
r_stat.dwSize = sizeof(RAS_STATS);
stat=RasGetConnectionStatistics(&hRasCon, &r_stat);
if (stat!=0){itoa(stat,cInByte,10);
MessageBox(hwnd, cInByte, "RasGetConnectionStatistics", NULL);
}
вылетает програ!
что не так?

Вернуться в Вопросы программирования в C++Builder