КИТА unofficial

Компьютерный => Программирование => Тема начата: Артем от Июль 29, 2008, 11:37:40



Название: WinAPI в C++
Отправлено: Артем от Июль 29, 2008, 11:37:40
Предлагаю в этой теме задавать вопросы по сабжу (http://ru.wikipedia.org/wiki/WinAPI). Но для начала скажу несколько слов тем, кто только планирует изучать WinAPI.

Пересмотрев около десятка книг для начинающих, я выделил для себя только 3, действительно написанные на "русском" языке :)

  • П.Румянцев - Азбука программирования в Win32 API
  • Ч.Петзолд - Программирования для Win95
  • К.Финогенов - Win32. Основы программирования (2006)

Книга Румянцева по большей степени дублирует главы и примеры из книги Петзолда, но только более подробно и "разжевано". Требуется предварительное знание языка С, и основ ООП. Поэтому если Вы до этого писали лишь консольные приложения на С/С++ и хотите начать писать под Windows, то книга Румянцева или Петзолда безусловно для Вас.

К.Финогенов основательно подошел к написанию книги, и начал с архитектуры процессоров и довольно подробным описанием используемых IDE. Также имеется целая глава, посвященная синтаксису стандартного языка С++. И только с 4-ой главы начинается изучение WinAPI. Поэтому, если с языком С/С++ Вы знакомы поверхностно, эта книга станет для Вас хорошим учителем.


Полезные ссылки:

  • Введение в WinAPI и несколько простых примеров (http://forum.vingrad.ru/topic-62459.html)
  • Ссылки на справочные материалы и литературу (http://forum.vingrad.ru/topic-62752.html)
  • Типы данных в Windows (http://www.opendn.org/index.php/Category:Типы_данных)
  • Большой справочник по WinAPI (http://develab.narod.ru/api/)


Название: Re: WinAPI в C++
Отправлено: Магнетон Бора от Апрель 22, 2009, 02:37:45
Доброе время суток, уважаемые форумчане )))

Есть такое дело... Делаю программу с помощью WinApi и у меня есть елемент управления ComboBox, а точнее их 2. Я их использую в диалоговом окне и прописываю в файле ресурсов. У меня в них хранятся ЧИСЛА вот вопрос как бы мне число оттуда вытащить и запомнить как ЧИСЛО, а не строку. Пробовал делать так:

Вот небольшой фрагмент диалоговой функции, но тут какой-то баг и я никак не пойму в чем дело (((

Код:
		case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDOK:
nItem = SendMessage(hCombo1,CB_GETCURSEL,0,0);
wx = atoi(SendMessage(hCombo1,CB_GETITEMDATA,nItem,0));
nItem = SendMessage(hCombo2,CB_GETCURSEL,0,0);
wy = atoi(SendMessage(hCombo2,CB_GETITEMDATA,nItem,0));

case IDCANCEL: break;
};
}
break;

Кто-нибудь может предложить вариант получения информации из этого элемента управления?  8)  :)

З. Ы. Заранее благодарен  :)


Название: Re: WinAPI в C++
Отправлено: ZaQ от Апрель 27, 2009, 09:42:25
А конвертнуть строку в число религия не позволяет???
Чето я невнимательно читаю, пора спать :). Ищи ошибку, читай МСДН.


Название: Re: WinAPI в C++
Отправлено: TARAKAN от Июнь 03, 2009, 09:15:20
В программе создается поток, приостановка и продолжение работает.
НО если попытаться завершить его, то заново запустить не получается ...
На завершение выполняю
Цитировать
potok1.stop=1;
TerminateThread(potok1.hpotok,potok1.exitcode);
На запуск пробовал делать
Цитировать
potok1.hpotok=CreateThread(NULL,0,ThreadFunc_1,(PVOID)(&potok1),CREATE_SUSPENDED,&potok1.per_potok);
potok1.hWndPot=hWndChild;
potok1.stop=0;
ResumeThread(potok1.hpotok);
Не получается ... все равно не запускает поток ... точнее оно вроде как запускает его тк ошибок не выдает, но тот прямоугольник что должен двигаться вообще не появляется ... т е не прорисовывается ...


Название: Re: WinAPI в C++
Отправлено: AlexXxandr от Июнь 05, 2009, 05:09:40
Нужно сделать так чтобы по WaitableTimer'у звучал сигнал Beep
Вот как я делаю:
Код:
VOID CALLBACK TimerAPCProc(LPVOID, DWORD, DWORD);
HANDLE hWTimer;
SYSTEMTIME st;
FILETIME ftLocal, ftUTC;
LARGE_INTEGER liUTC;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,int nCmdShow){
//--------------------ТАЙМЕР--------------------------------------------------------------
// создаем таймер с автосбросом
hWTimer = CreateWaitableTimer(NULL, FALSE, NULL);
// узнаем текущую дату/время
GetLocalTime(&st);
st.wHour = 19;
st.wMinute = 34;
st.wSecond = 0;
// преобразуем время из SYSTEMTIME в FILETIME
SystemTimeToFileTime(&st, &ftLocal);
// преобразуем местное время в UTC-время
LocalFileTimeToFileTime(&ftLocal, &ftUTC);
// преобразуем FILETIME в LARGE_INTEGER из-за
// различий в выравнивании данных
liUTC.LowPart = ftUTC.dwLowDateTime;
liUTC.HighPart = ftUTC.dwHighDateTime;
// устанавливаем таймер
SetWaitableTimer(hWTimer, &liUTC, 24*60*60*1000, TimerAPCProc, NULL, FALSE);
//---------------------------------------------------------------------------------------
}
VOID CALLBACK TimerAPCProc(LPVOID, DWORD, DWORD){
Beep(1000,500); // выдается звуковой сигнал
};
В StdAfx.h я прописал #define _WIN32_WINNT 0x0400 иначе не компилировалось.
Проблема в том что если указать текущее время, то при запуске звуковой сигнал издается, а если указать только будущее время, то он не срабатывает, как мне кажется таймер просто не считает время. Помогите, что делать?


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 05, 2009, 11:23:09
полные исходники - в ЗИП и приаттачь


Название: Re: WinAPI в C++
Отправлено: AlexXxandr от Июнь 06, 2009, 10:05:51
Лаба компилица можете запускать, кусок кода с таймером выделен в ф-и винмэин.


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 07, 2009, 12:35:02
итак,
цитата
"TimerAPCProc вызывается из того потока, который обратился к SetWaitableTimer в момент срабаты вания таймера, — но только если вызывающий поток находится в "тревожном" (aler table) состоянии, т. e. ожидает этого в вызове одной из функций SleepEx, WaitForSingle ObjectEx, WaitForMultipleObjectsEx,MsgWaitForMultipleObjectsEx или SignalObjectAndWait Если же поток этого не ожидает в любой из перечисленных функций, система не поставит в очередь АРС-функцию таймера. Тем самым система не даст АРС-очереди потока переполниться уведомлениями от таймера, которые могли бы впустую израсходовать колоссальный объем памяти.
Если в момент срабатывания таймера Ваш поток находится в одной из перечис ленных ранее функций, система заставляет его вызвать процедуру обратного вызова"


Название: Re: WinAPI в C++
Отправлено: AlexXxandr от Июнь 07, 2009, 12:58:50
Что то я не совсем понял, что мне поменять надо. Мне сеттаймер сделать в отдельный поток? Можно по проще объяснить плиз?


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 07, 2009, 01:09:43
угу, можно создать в отдельном потоке, а потом вызвать в нем sleep


Название: Re: WinAPI в C++
Отправлено: AlexXxandr от Июнь 07, 2009, 01:41:25
Создал 4ый поток при создании главного окна, поток запущенный, вот ф-я его обработки. Если раньше при установки текущей или прошедшей минуты оно срабатывало, теперь вообще не работает.
Код:
DWORD WINAPI ThreadFunc_4(PVOID pvParam){ 
struct  POTOK *p=(struct POTOK *)(pvParam);
static HDC hDC=GetDC(p->hWndPot);
hWTimer = CreateWaitableTimer(NULL, FALSE, NULL);
GetLocalTime(&st);
st.wHour = 13;
st.wMinute = 39;
st.wSecond = 00;
SystemTimeToFileTime(&st, &ftLocal);
LocalFileTimeToFileTime(&ftLocal, &ftUTC);
liUTC.LowPart = ftUTC.dwLowDateTime;
liUTC.HighPart = ftUTC.dwHighDateTime;
while(!p->stop){
Sleep(1000);
SetWaitableTimer(hWTimer, (LARGE_INTEGER *)&liUTC, 24*60*60*1000, TimerAPCProc, NULL, FALSE);
}
return(0);
}


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 07, 2009, 01:51:45
только если вызывающий поток находится в "тревожном" (aler table) состоянии, т. e. ожидает этого в вызове одной из функций SleepEx, WaitForSingle ObjectEx, WaitForMultipleObjectsEx,MsgWaitForMultipleObjectsEx или SignalObjectAndWait Если же поток этого не ожидает в любой из перечисленных функций, система не поставит в очередь АРС-функцию таймера.
куда уж понятнее???


Название: Re: WinAPI в C++
Отправлено: AlexXxandr от Июнь 07, 2009, 02:03:14
Так я итак делаю Sleep


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 07, 2009, 02:08:11
Итак, читаем MSDN.
Sleep Function

Suspends the execution of the current thread until the time-out interval elapses.
To enter an alertable wait state, use the SleepEx function.
понятненько?
третий раз объяснил то, что написал.


Название: Re: WinAPI в C++
Отправлено: AlexXxandr от Июнь 07, 2009, 02:15:13
Урааа!!!111
Я тупил т.к. я поставил SleepEx(1000,FALSE); и оно все так же не работало, но когда я поставил SleepEx(1000,TRUE); сразу заработало. Спасибо Вам большое!


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 07, 2009, 02:20:04
естественно, с false не работало.
DWORD WINAPI SleepEx(
  __in  DWORD dwMilliseconds,
  __in  BOOL bAlertable
);

(Отправлено в: Июнь 07, 2009, 02:18:48 )
 
Не получается ... все равно не запускает поток ...
а CloseHandle для дескриптора потока перед его пересозданием пробовал?


Название: Re: WinAPI в C++
Отправлено: TARAKAN от Июнь 07, 2009, 09:03:47
а CloseHandle для дескриптора потока перед его пересозданием пробовал?
Попоже попробую, сейчас проблема в другом...

Вот пример который нам скинули
Цитировать
Примеры программ по синхронизации потоков
Критические разделы (секции)
Пример использования критического раздела.
Синхронизируется работа двух потоков при заполнении элементов массива значениями и выводе их на экран.
Код:
CRITICAL_SECTION cs;
DWORD a[5]; // Объявление глобального массива
// Функция потока 1
DWORD WINAPI ThreadFunc1(PVOID pvParam)
{ int i; DWORD dwResult = 0, num=0;
  struct PARAM *p= (struct PARAM *) pvParam;
  while (!p->stop)
  {
   EnterCriticalSection(&cs);
   for ( i = 0; i < 5; i++ ) a[ i ] = num;
   LeaveCriticalSection(&cs);
   num++;
  }
  return(dwResult);
}
// Функция потока 2
DWORD WINAPI ThreadFunc2(PVOID pvParam)
{ int i; DWORD dwResult = 0;
  struct PARAM *p= (struct PARAM *) pvParam;
  while (!p->stop)
  {
   EnterCriticalSection(&cs);
   for ( i = 0; i < 5; i++ ) printf("%ld  ", a[ i ]);
   printf("\n");
   LeaveCriticalSection(&cs);
  }
  return(dwResult);
}
// --- Функция WinMain
int APIENTRY WinMain(…)
{
  // Создание объекта критический раздел
  InitializeCriticalSection(&cs);
 …
  // Удаление объекта критический раздел (при необходимости)
  DeleteCriticalSection(&cs);
 …
}

Моя программа прикреплена
Проблема в том, что если запустить 2 или 3 поток, то другой уже не запуститься (2 или 3)
А должны как я понимаю поочереди ... смотрю в пример и не понимаю в чем ошибка ...
Пытался пример скомпилировать, он срабатывает 1 раз, т е выводит на экран 1 раз цифры, но потом вылетает ...


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 07, 2009, 09:21:58
начнём с того, что у тебя Sleep стоит внутри EnterCriticalSection - LeaveCriticalSection
итог - другой поток вряд ли захватит критическую секцию


Название: Re: WinAPI в C++
Отправлено: TARAKAN от Июнь 07, 2009, 10:58:26
Цитировать
Текстовая строка   Перемещается сверху-вниз и наоборот с шагом 10 пикселей с интервалом 0,2 сек
Прямоугольник с закругленными краями    Перемещается по диагонали сверху-вниз и наоборот с шагом 40,30 пикселей с интервалом 0,5 сек
Если он (слип) так мешает, тогда как реализовать интервал между выполнением ? Всегда его использовал ...

Просто даже сам пример 1 раз выполняет 1-й поток потом выполняет 2-й и программа вылетает ....


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 07, 2009, 11:01:41
ну что ж вы такие невнимательные????
Sleep выставь для начала из
EnterCriticalSection - LeaveCriticalSection
во внешний код


Название: Re: WinAPI в C++
Отправлено: TARAKAN от Июнь 07, 2009, 11:17:19
Мне надо сделать интервал между перемещениями фигуры/текста, а не между переключением на другой поток ...
Всетаки попробовал, сделал вот так
Цитировать
while(!p->stop)
   {
      Sleep(3000);
      EnterCriticalSection(&cs);
Старый слип удалил естественно.
Теперь чтото вообще не видно ничего ... хотя когда идет остановка на 3 секунды думаю должен быть виден результат но его нету =\


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 08, 2009, 12:44:54
Код:
DWORD WINAPI ThreadFunc_2(PVOID pvParam)
{
DWORD dwRes=0;
static RECT rPopup;
static HDC hDCPopup;
struct  potok *p=(struct potok *)(pvParam);
static UINT xPosE,yPosE;
static int flag=0;
static char str[]="Строка";
GetClientRect(p->hWndPot,&rPopup);
xPosE=((rPopup.right-rPopup.left)-50)/2.;
yPosE=((rPopup.bottom-rPopup.top)-30)/2.;
while(!p->stop)
{
hDCPopup=GetDC(p->hWndPot);
EnterCriticalSection(&cs);
while(count1<1)
{
InvalidateRect(p->hWndPot,NULL,true);
UpdateWindow(p->hWndPot);
TextOut(hDCPopup,xPosE,yPosE,str,7);
if(yPosE+40>=rPopup.bottom-rPopup.top)
flag=1;
if(yPosE<=40)
flag=0;
if(flag)
yPosE-=10;
else
yPosE+=10;
count1++;
}
count1=0;
ReleaseDC(p->hWndPot,hDCPopup);
LeaveCriticalSection(&cs);
Sleep(500);
}
return dwRes;
}

DWORD WINAPI ThreadFunc_3(PVOID pvParam)
{
DWORD dwRes=0;
static RECT rPopup;
static HDC hDCPopup;
struct  potok *p=(struct potok *)(pvParam);
static UINT xPosE,yPosE;
static int flag=1;
GetClientRect(p->hWndPot,&rPopup);
xPosE=0;
yPosE=0;
while(!p->stop)
{
hDCPopup=GetDC(p->hWndPot);
EnterCriticalSection(&cs);
while(count2<1)
{
InvalidateRect(p->hWndPot,NULL,true);
UpdateWindow(p->hWndPot);
RoundRect(hDCPopup,xPosE,yPosE,xPosE+70,yPosE+50,30,30);

if(xPosE+100>=rPopup.right || yPosE+5<=rPopup.top)
flag=0;

if(xPosE<=rPopup.left+10 || yPosE+55>=rPopup.bottom)
flag=1;

if(flag)
{
xPosE+=40;
yPosE+=30;
}
else
{
xPosE-=40;
yPosE-=30;
}
count2++;
}
count2=0;
ReleaseDC(p->hWndPot,hDCPopup);
LeaveCriticalSection(&cs);
Sleep(500);
}
return dwRes;
}
отличия от своего ищи сам.
код рабочий


Название: Re: WinAPI в C++
Отправлено: TARAKAN от Июнь 08, 2009, 12:25:13
Отличия я заметил, спасибо все работает, в принципе ошибку понял, НО видимо вы невнимательно читали мои сообщения.
Мне надо сделать интервал между перемещениями фигуры/текста, а не между переключением на другой поток ...
Т е Слип должен быть в цикле while(count2<10){ ... }
Если разместить его так как вы предлогаете, то у меня будет остановка между переключением на другой поток...
А если размещать Слип в цикле while(count2<10){ ... } то получаем старую проблему, выполняется постоянно поток, который запущен первым.

Мне надо чтобы текст сдвинулся 8 раз с интервалом допустим 0,5 сек, потом переключился на другой поток и прямоугольник сдвинулся 10 раз с интервалом 0,4 сек.


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 08, 2009, 12:31:28
а слабо сделать очень маленький Sleep после LeaveCriticalSection чтоб другой поток успел войти?


Название: Re: WinAPI в C++
Отправлено: TARAKAN от Июнь 08, 2009, 12:38:10
Т к интервал должен быть между перемещением фигуры/текста, то и слип должен быть в цикле while(count2<1){...} , а следовательно внутри входа/выхода из крит. секции ...
А если его расположить не в этом цикле, т е после LeaveCriticalSection то будет выполняться моментально смещение 8 раз текста (на глаз его просто не заметишь), потом задержка, а потом будет так же быстро выполнено перемещение фигуры 10 раз ...
А мне как раз надо чтобы было видно как он делает эти 8 шагов, задержка между переключением мне вообще не нужна ...


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 08, 2009, 01:09:17
ещё немного, и мне выдадут предупреждение за мат.
сделай В ТОМ ЧИСЛЕ задержку ПОСЛЕ освобождения секции.
ну что непонятно???
неужели трудно самому сообразить?


Название: Re: WinAPI в C++
Отправлено: TARAKAN от Июнь 08, 2009, 01:15:16
Блин теперь понял  :D
Слова "в том числе" помогли ))))))
Получается что без слипа поток просто не успевал подхватить критическую секцию и поэтому постоянно 1 выполнялся =\


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 08, 2009, 01:17:30
Halleluja!!!!!!!!!1


Название: Re: WinAPI в C++
Отправлено: ZaQ от Июнь 08, 2009, 07:03:15
да, и делай слип(1), с нулем в параметрах потоки могут драться, особенно на (псевдо)многоядерных процах.


Название: Re: WinAPI в C++
Отправлено: AlexXxandr от Сентябрь 22, 2009, 08:41:45
Добрый вечер всем!
Такое вот задание есть: "с использованием стандартного диалога Open определяется путь и имя исходного файла, для просмотра его содержимого необходимо вызвать редактор Notepad с передачей ему пути и имени файла"
Добавил пункт меню и в его обработку пишу:
Код:
case ID_VIEW:
// Инициализация OPENFILENAME
ZeroMemory(&ofn,sizeof(ofn));
ofn.lStructSize=sizeof(ofn);
ofn.hwndOwner=hWnd;
ofn.lpstrFile=FileName;
ofn.lpstrFile[0]='\0';
ofn.nMaxFile=sizeof(FileName);
ofn.lpstrFilter="*.txt\0*.TXT\0";
ofn.nFilterIndex=1;
ofn.lpstrFileTitle=NULL;
ofn.nMaxFileTitle=0;
ofn.lpstrInitialDir="d:";
ofn.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
[i]if (GetOpenFileName(&ofn)==TRUE)
//ЗДЕСЬ НАВЕРНО ОБРАБОТКА БЛОКНОТОМ[/i]
break;
Собственно вопросы:
1. Как запустить блокнотом нужный мне файл?
2. Как сделать стартовой папкой т.е. что передать в ofn.lpstrInitialDir чтобы открывалась текущая папка, т.е. в которой находится ехе файл.

ЗЫ может есть что почитать про работу с файлами с примерами?


Название: Re: WinAPI в C++
Отправлено: tos от Сентябрь 22, 2009, 09:22:55
без обид, но MSDN тебе в помощь. нет смысла отвечать на такие глупые вопросы.
это ведь не "помогите найти ошибку". цитированием гугла заниматься не собираюсь. :google:
ЗЫ. я не вредный - всегда помогу в более сложной ситуации. обращайся.


Название: Re: WinAPI в C++
Отправлено: AlexXxandr от Сентябрь 22, 2009, 10:05:34
Хорошо и что же мне в мсдн искать? Я незнаю как это спросить у гугла даже, то что спрашивал, фигня получается...


Название: Re: WinAPI в C++
Отправлено: tos от Сентябрь 22, 2009, 10:13:59
набираем OPENFILENAME и получаем шикаааарную (С) (Эрик Картман) сцылку.
http://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx (http://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx)
и вуаля -  LPCTSTR       lpstrInitialDir - то что нам надо!
читаем дальше
Windows 2000/XP/Vista:
 - If lpstrFile contains a path, that path is the initial directory.
 - Otherwise, lpstrInitialDir specifies the initial directory.
 - Otherwise, if the application has used an Open or Save As dialog box in the past, the path most recently used is selected as the initial      directory. However, if an application is not run for a long time, its saved selected path is discarded.
If lpstrInitialDir is NULL and the current directory contains any files of the specified filter types, the initial directory is the current directory.
 - Otherwise, the initial directory is the personal files directory of the current user.
 - Otherwise, the initial directory is the Desktop folder.
окей, вроде ясно.
тперь по 1 пункту.
вбиваем в поиск "параметры запуска notepad" и получаем ссылку http://forum.script-coding.info/viewtopic.php?id=2858
а теперь читаем "notepad.exe c:\file.txt"
ну, круто я пользуюсь гуглом?
ЗЫ. с тебя пиво за урок пользования гуглом.


Название: Re: WinAPI в C++
Отправлено: broken-wings от Сентябрь 22, 2009, 10:25:42
Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
tos, ты сегодня - само добро :P)))


Название: Re: WinAPI в C++
Отправлено: Fr0sT от Октябрь 08, 2009, 09:45:30
Вопрос по работе с файлами: открыл файл, с помощью WriteFile записал строку. В строке были символы \n\r, а в файле все данные записаны в одну строку. Как быть если нужна новая строка?
(Отправлено в: Сентябрь 24, 2009, 09:53:17 )
 Неактуально. Идея в том, что нужно \r\n а не наоборот
(Отправлено в: Сентябрь 25, 2009, 11:08:30 )
 Задание: создать текстовый файл для записи, для него создать проекцию в память, по адресу этой проекции сформировать содержимое выходного файла.
Код:
HANDLE hFile,hFileMappingCreate;

hFile=CreateFile(szFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
hFileMappingCreate=CreateFileMapping(hFile,0,PAGE_READWRITE,0,0,0);

char* BufferWrite=(char*)MapViewOfFile(hFileMappingCreate,FILE_MAP_ALL_ACCESS,0,0,0);
strcpy(BufferWrite,"1111");
//
Вылетает на последней строке с First-chance exception in Lab2.exe: 0xC0000005: Access Violation. Где ошибся?
З.Ы. пользовался нижним примером с http://forum.vingrad.ru/articles/topic-157806.html (http://forum.vingrad.ru/articles/topic-157806.html)


Название: Re: WinAPI в C++
Отправлено: tos от Октябрь 09, 2009, 02:03:48
проект VS в студию.


Название: Re: WinAPI в C++
Отправлено: Fr0sT от Октябрь 10, 2009, 08:53:06
вот


Название: Re: WinAPI в C++
Отправлено: O(o.o)O от Октябрь 12, 2009, 08:48:31
Всем доброго времени суток.

Подскажите пожалуйста аналоги цункций MoveWindow и SetWindowPos.

Для чего мне это нужно: хотел написать маленькую прогу которая заставит кнопку пуск летать по экрану, вышеперечисленные функции не смогли этого выполнить (на ноуте стоит виндовс 7) , хотя под виндовс ХР все корректно отрабатывает...

Если кто-нибудь еще и объяснит почему возникла такая сложность с кнопкой Пуск буду очень благодарен.

З.ы. просьба за глупые вопросы сильно не бить, я только начал учить WinAPI...


Название: Re: WinAPI в C++
Отправлено: Sanya от Июнь 18, 2010, 04:45:54
Люди добрые помогите пожайлуста с прогой. Может у кого есть .Переместить все файлы из одного каталога в другой с подкаталогами (реализовать в WinAPI)


Название: Re: WinAPI в C++
Отправлено: Kenny от Июнь 18, 2010, 04:48:52
:D попробуй wget и mv для win.
Еще можно попробовать сдать powershell.


Название: Re: WinAPI в C++
Отправлено: Sanya от Июнь 20, 2010, 12:13:48
Люди добрые помогите пожайлуста с прогой. Может у кого есть .Переместить все файлы из одного каталога в другой с подкаталогами (реализовать в WinAPI)
(Отправлено в: 19 Июнь 2010, 23:55:52)
 P.S. Очень нужно правда
(Отправлено в: 20 Июнь 2010, 00:10:59)
  :( :( :( :( :( :(


Название: Re: WinAPI в C++
Отправлено: Kenny от Июнь 20, 2010, 01:01:03
За 2 дня можно было бы 4-5 таких лаб сделать не зная винапи. Вон из профессии :о)


Название: Re: WinAPI в C++
Отправлено: Alder от Июнь 20, 2010, 09:13:16
http://tinyurl.com/3y4o578 (http://tinyurl.com/3y4o578)
У меня все.


Название: Re: WinAPI в C++
Отправлено: Sanya от Июнь 21, 2010, 01:19:36
Плиз
 :'( :'( :'( :'( :'( :'(


Название: Re: WinAPI в C++
Отправлено: Alder от Июнь 21, 2010, 01:46:11
Sanya, ответь на вопрос - у тебя что-то не получается или ты не хочешь делать? Если второе, то извини - мы тут не любим ленивых.


Название: Re: WinAPI в C++
Отправлено: Sanya от Июнь 21, 2010, 02:57:41
Ситуация такая у нас по СИСПО ассемблер и WinAPI C++. По ассемблеру нам хоть что то дали на лекциях и практике, а по WinAPI ничего да и само задание выложили 2 недели назад. Я просто физически не успеваю разобраться в WinAPI.


Название: Re: WinAPI в C++
Отправлено: naxellar от Июнь 21, 2010, 03:05:16
ну-ну  :nea:


Название: Re: WinAPI в C++
Отправлено: Alder от Июнь 21, 2010, 03:10:24
Sanya, я выше дал ссылку. Пример решения твоей задачи находится в Гугле за 10 минут. Еще час потратишь на проверку и понимание кода (он зачастую с комментариями). Так что было бы желание.


Название: Re: WinAPI в C++
Отправлено: Kenny от Июнь 21, 2010, 03:13:34
Ситуация такая у нас по СИСПО ассемблер и WinAPI C++. По ассемблеру нам хоть что то дали на лекциях и практике, а по WinAPI ничего да и само задание выложили 2 недели назад. Я просто физически не успеваю разобраться в WinAPI.
Ну да, главное чтобы на пивко и погулять время было. Без обид.


Название: Re: WinAPI в C++
Отправлено: Sanya от Июнь 21, 2010, 03:20:44
Во первых я непью и не дебоширю. А во вторых ссесия это не только СИСПО


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 21, 2010, 03:25:56
Ну, рассказывай, что ты весь семестр ишачил, а учебная программа такая сложная, что всё равно не успел. :podz:
Но лучше расскажи своей бабушке или маме - они может и пожалеют "да, нынче учёба - лишь бы деньги выкачать"


Название: Re: WinAPI в C++
Отправлено: Sanya от Июнь 21, 2010, 03:31:51
Ну это смотря где учиться. А по поводу "да, нынче учёба - лишь бы деньги выкачать" с нашем факультетом не пройдет проверенно времинем.


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 21, 2010, 03:33:46
короче, пока ты регистрировался и плакался на форуме, мог бы написать половину лабы.
в инете по 1 ссылке Alder'а есть готовая функция.


Название: Re: WinAPI в C++
Отправлено: Sanya от Июнь 21, 2010, 03:38:55
Да функция это не такая проблема. Проблема в с Win-приложением, не получается много стандартных вещей


Название: Re: WinAPI в C++
Отправлено: tos от Июнь 21, 2010, 03:41:51
Все лабы делаются на основе лабораторной работы #1.
Вы её выполняли?
Вот Вам в помощь - http://msdn.microsoft.com/en-us/default.aspx (http://msdn.microsoft.com/en-us/default.aspx)


Название: Re: WinAPI в C++
Отправлено: LazarusLong от Июнь 25, 2010, 11:27:42
Sanya, помнится проходил я интервью при приеме на работу в одной конторе. Мои знания WinAPI на тот момент были примерно такие же как у тебя. Я знал что WinAPI есть и что он позволяет много чего делать. И все.

Мне дали довольно объемное тестовое задание именно по WinAPI с формулировкой - принести готовое приложение на следующий день. Одной, всего лишь одной из нескольких частей этого задания было тоже что у тебя. У меня на все это задание, то есть на то, что бы разобраться с нуля как вообще делать приложения с помощью WinAPI, плюс как сделать конкретно те вещи, которые требовались (а там были вещи и посложнее) ушло часов 5. При этом интернета у меня дома не было тогда, единственным источником, которым я пользовался был MSDN.

Так что хватит ныть, а бери и разбирайся. Там все легко.