|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 4, 2004 10:06:29 q_q #include <windows.h> Действительно , так гораздо лучше :) Просто windows.h и др. не идут с MS Visual C++ Toolkit 2003 , но благо нашёл на винте соседа заархивированный \DevStudio\VC98 . |
|
|
Дата: Окт 4, 2004 13:28:07 bogrus > Просто windows.h и др. не идут с MS Visual C++ Toolkit 2003 они идут с psdk, размер которого в минимальном варианте ~40Mb ;-) |
|
|
Дата: Окт 4, 2004 13:42:13 · Поправил: Asterix q_q > bogrus уже показал __declspec(naked) Что-то я не понял как мне применить в моём случае, компилятор почему-то ругается. mini.cpp(22) : error C2561: 'start' : function must return a value
mini.cpp(16) : see declaration of 'start' |
|
|
Дата: Окт 4, 2004 15:31:58 Asterix Показывай весь код. |
|
|
Дата: Окт 4, 2004 16:33:10 · Поправил: Asterix q_q Вот:
#include <windows.h>
#include "resource.h"
#pragma comment(linker, "/ENTRY:start")
#pragma comment(linker, "/opt:nowin98")
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "user32.lib")
BOOL CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
HINSTANCE hInstance;
// void start(void)
__declspec(naked) start ()
{
hInstance = GetModuleHandle(NULL);
DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG_1), 0, (DLGPROC) DlgProc, 0);
ExitProcess(0);
}
BOOL CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
BOOL r = TRUE;
switch(msg)
{
case WM_INITDIALOG:
SendMessage(hwnd, WM_SETICON, ICON_BIG,
(LPARAM) LoadIcon(hInstance, MAKEINTRESOURCE(MAINICON)));
SendMessage(hwnd, WM_SETICON, ICON_SMALL,
(LPARAM) LoadImage(hInstance, MAKEINTRESOURCE(MAINICON), IMAGE_ICON, 16, 16, 0));
break;
case WM_CLOSE:
EndDialog(hwnd, 0);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDB_PLAY:
break;
case IDB_STOP:
break;
case IDB_EXIT:
SendMessage(hwnd, WM_CLOSE, 0, 0);
break;
default:
r = FALSE;
}
}
return r;
} |
|
|
Дата: Окт 4, 2004 16:51:13 __declspec(naked) void start(void){ |
|
|
Дата: Окт 4, 2004 17:01:27 Quantum Спасибо, теперь работает :-) Ты свой mail на hotmail проверяешь? |
|
|
Дата: Окт 4, 2004 17:04:09 Asterix Периодически :-) |
|
|
Дата: Окт 4, 2004 17:18:49 · Поправил: Asterix q_q Тут у тебя ошибка default должен быть сразу после break: SendMessage(hwnd, WM_CLOSE, 0, 0);
break;
}
default:
r = FALSE;
Так что return'ы нагляднее, меньше вероятность ошибиться ;-) ЗЫ: И у меня тоже неправильно, блин, запутался я в этих break'ах %) |
|
|
Дата: Окт 4, 2004 17:20:08 Quantum Ну и.. письмо получил? |
|
|
Дата: Окт 4, 2004 18:17:36 · Поправил: Quantum Asterix Никак нет. ЗЫ: Написал. |
|
|
Дата: Окт 4, 2004 18:23:54 · Поправил: Asterix Quantum Странно, напиши мне тогда письмо, может у меня адрес не тот.. |
|
|
Дата: Окт 4, 2004 22:30:12 · Поправил: Asterix Quantum Отправил снова, получил? :-) Я как в мультике, удав привет передавал.. :-) ты там в junk'е посмотри, мои письма hotmail любит туда совать ;-) |
|
|
Дата: Окт 5, 2004 01:38:47 · Поправил: Quantum Asterix Получил!!! И уже ответил. |
|
|
Дата: Окт 5, 2004 04:01:44 Asterix Тут у тебя ошибка default должен быть сразу после break Заблуждаешься. default не является обязательной опцией оператора switch. По логике твоей DlgProc, TRUE возвращается только если обработаны WM_INITDIALOG, WM_CLOSE, WM_COMMAND + IDC_BUTTON_1, WM_COMMAND + IDC_BUTTON_2 или WM_COMMAND + IDC_BUTTON_3. Эту же логику я и реализовал, обойдясь при этом без наглядных return'ов. Imho использование большого количества return'ов в рамках отдельной подпрограммы плохо сказывается на сопровождении. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057 |