КИТА unofficial
Ноябрь 22, 2024, 04:21:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   ПРАВИЛА Помощь WIKI PDA Войти Регистрация  


Страниц: 1 [2] 3  Все   Вниз
  Печать  
Автор Тема: WinAPI в C++  (Прочитано 91954 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
TARAKAN
Tifon
Бакалавр
**

Карма: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 134


WWW
« Ответ #20 : Июнь 07, 2009, 11:17:19 »

Мне надо сделать интервал между перемещениями фигуры/текста, а не между переключением на другой поток ...
Всетаки попробовал, сделал вот так
Цитировать
while(!p->stop)
   {
      Sleep(3000);
      EnterCriticalSection(&cs);
Старый слип удалил естественно.
Теперь чтото вообще не видно ничего ... хотя когда идет остановка на 3 секунды думаю должен быть виден результат но его нету =\
Записан

Студент: По моему легче использовать printf...
EvilMax: Зато cout - это тру! = ))
tos
Mодератор
Декан
*****

Карма: +80/-16
Offline Offline

Награды:
1 место в фотоконкурсе \1,3 место в фотоконкурсе \II место в фотоконкурсе \
Сообщений: 1949


♪♪ ♫Nice boys don`t play Rock`n`Roll♫ ♪♪


« Ответ #21 : Июнь 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;
}
отличия от своего ищи сам.
код рабочий
Записан
TARAKAN
Tifon
Бакалавр
**

Карма: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 134


WWW
« Ответ #22 : Июнь 08, 2009, 12:25:13 »

Отличия я заметил, спасибо все работает, в принципе ошибку понял, НО видимо вы невнимательно читали мои сообщения.
Мне надо сделать интервал между перемещениями фигуры/текста, а не между переключением на другой поток ...
Т е Слип должен быть в цикле while(count2<10){ ... }
Если разместить его так как вы предлогаете, то у меня будет остановка между переключением на другой поток...
А если размещать Слип в цикле while(count2<10){ ... } то получаем старую проблему, выполняется постоянно поток, который запущен первым.

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

Студент: По моему легче использовать printf...
EvilMax: Зато cout - это тру! = ))
tos
Mодератор
Декан
*****

Карма: +80/-16
Offline Offline

Награды:
1 место в фотоконкурсе \1,3 место в фотоконкурсе \II место в фотоконкурсе \
Сообщений: 1949


♪♪ ♫Nice boys don`t play Rock`n`Roll♫ ♪♪


« Ответ #23 : Июнь 08, 2009, 12:31:28 »

а слабо сделать очень маленький Sleep после LeaveCriticalSection чтоб другой поток успел войти?
Записан
TARAKAN
Tifon
Бакалавр
**

Карма: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 134


WWW
« Ответ #24 : Июнь 08, 2009, 12:38:10 »

Т к интервал должен быть между перемещением фигуры/текста, то и слип должен быть в цикле while(count2<1){...} , а следовательно внутри входа/выхода из крит. секции ...
А если его расположить не в этом цикле, т е после LeaveCriticalSection то будет выполняться моментально смещение 8 раз текста (на глаз его просто не заметишь), потом задержка, а потом будет так же быстро выполнено перемещение фигуры 10 раз ...
А мне как раз надо чтобы было видно как он делает эти 8 шагов, задержка между переключением мне вообще не нужна ...
Записан

Студент: По моему легче использовать printf...
EvilMax: Зато cout - это тру! = ))
tos
Mодератор
Декан
*****

Карма: +80/-16
Offline Offline

Награды:
1 место в фотоконкурсе \1,3 место в фотоконкурсе \II место в фотоконкурсе \
Сообщений: 1949


♪♪ ♫Nice boys don`t play Rock`n`Roll♫ ♪♪


« Ответ #25 : Июнь 08, 2009, 01:09:17 »

ещё немного, и мне выдадут предупреждение за мат.
сделай В ТОМ ЧИСЛЕ задержку ПОСЛЕ освобождения секции.
ну что непонятно???
неужели трудно самому сообразить?
Записан
TARAKAN
Tifon
Бакалавр
**

Карма: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 134


WWW
« Ответ #26 : Июнь 08, 2009, 01:15:16 »

Блин теперь понял  Смеющийся
Слова "в том числе" помогли ))))))
Получается что без слипа поток просто не успевал подхватить критическую секцию и поэтому постоянно 1 выполнялся =\
Записан

Студент: По моему легче использовать printf...
EvilMax: Зато cout - это тру! = ))
tos
Mодератор
Декан
*****

Карма: +80/-16
Offline Offline

Награды:
1 место в фотоконкурсе \1,3 место в фотоконкурсе \II место в фотоконкурсе \
Сообщений: 1949


♪♪ ♫Nice boys don`t play Rock`n`Roll♫ ♪♪


« Ответ #27 : Июнь 08, 2009, 01:17:30 »

Halleluja!!!!!!!!!1
Записан
ZaQ
Бакалавр
**

Карма: +6/-1
Offline Offline

Пол: Мужской
Сообщений: 128



« Ответ #28 : Июнь 08, 2009, 07:03:15 »

да, и делай слип(1), с нулем в параметрах потоки могут драться, особенно на (псевдо)многоядерных процах.
Записан
AlexXxandr
Гость
« Ответ #29 : Сентябрь 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 чтобы открывалась текущая папка, т.е. в которой находится ехе файл.

ЗЫ может есть что почитать про работу с файлами с примерами?
Записан
tos
Mодератор
Декан
*****

Карма: +80/-16
Offline Offline

Награды:
1 место в фотоконкурсе \1,3 место в фотоконкурсе \II место в фотоконкурсе \
Сообщений: 1949


♪♪ ♫Nice boys don`t play Rock`n`Roll♫ ♪♪


« Ответ #30 : Сентябрь 22, 2009, 09:22:55 »

без обид, но MSDN тебе в помощь. нет смысла отвечать на такие глупые вопросы.
это ведь не "помогите найти ошибку". цитированием гугла заниматься не собираюсь. Гугль - твой друг
ЗЫ. я не вредный - всегда помогу в более сложной ситуации. обращайся.
Записан
AlexXxandr
Гость
« Ответ #31 : Сентябрь 22, 2009, 10:05:34 »

Хорошо и что же мне в мсдн искать? Я незнаю как это спросить у гугла даже, то что спрашивал, фигня получается...
Записан
tos
Mодератор
Декан
*****

Карма: +80/-16
Offline Offline

Награды:
1 место в фотоконкурсе \1,3 место в фотоконкурсе \II место в фотоконкурсе \
Сообщений: 1949


♪♪ ♫Nice boys don`t play Rock`n`Roll♫ ♪♪


« Ответ #32 : Сентябрь 22, 2009, 10:13:59 »

набираем OPENFILENAME и получаем шикаааарную (С) (Эрик Картман) сцылку.
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"
ну, круто я пользуюсь гуглом?
ЗЫ. с тебя пиво за урок пользования гуглом.
Записан
broken-wings
wings of empathy
ЧеГеварный
Проректор
*****

Карма: +176/-6
Offline Offline

Пол: Мужской
Награды:
3 место в фотоконкурсе \За III место в фотоконкурсе \За победу в конкурсе футбольных прогнозистов \
Сообщений: 4531


Эксперт по какашкам и поиску смыслов


« Ответ #33 : Сентябрь 22, 2009, 10:25:42 »

Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
tos, ты сегодня - само добро Показывает язык)))
Записан

кругом одно и то же свинство
но я умею выделять
по незначительным нюансам
спорт журналистику кино
Fr0sT
Очень добрый
Первак
*

Карма: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 45

ИУС 07


« Ответ #34 : Октябрь 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
Записан

Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
tos
Mодератор
Декан
*****

Карма: +80/-16
Offline Offline

Награды:
1 место в фотоконкурсе \1,3 место в фотоконкурсе \II место в фотоконкурсе \
Сообщений: 1949


♪♪ ♫Nice boys don`t play Rock`n`Roll♫ ♪♪


« Ответ #35 : Октябрь 09, 2009, 02:03:48 »

проект VS в студию.
Записан
Fr0sT
Очень добрый
Первак
*

Карма: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 45

ИУС 07


« Ответ #36 : Октябрь 10, 2009, 08:53:06 »

вот
Записан

Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
O(o.o)O
Абитуриент


Карма: +0/-0
Offline Offline

Сообщений: 1


« Ответ #37 : Октябрь 12, 2009, 08:48:31 »

Всем доброго времени суток.

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

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

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

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


Карма: +0/-0
Offline Offline

Сообщений: 7


« Ответ #38 : Июнь 18, 2010, 04:45:54 »

Люди добрые помогите пожайлуста с прогой. Может у кого есть .Переместить все файлы из одного каталога в другой с подкаталогами (реализовать в WinAPI)
Записан
Kenny
^___^
Проректор
*****

Карма: +69/-11
Offline Offline

Пол: Мужской
Награды:
3 место в фотоконкурсе \За II, III места в фотоконкурсе Вид из окна
Сообщений: 2352



WWW
« Ответ #39 : Июнь 18, 2010, 04:48:52 »

Смеющийся попробуй wget и mv для win.
Еще можно попробовать сдать powershell.
Записан
Страниц: 1 [2] 3  Все   Вверх
  Печать  
 
Перейти в:  

Penguins Counter Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Internetmap
Страница сгенерирована за 0.085 секунд. Запросов: 36.