Текущий архив: 2004.01.13;
Скачать: CL | DM;
ВнизПолучить Handle без Application Найти похожие ветки
← →
MScorp (2003-12-26 17:34) [0]у меня проект, в который не хотелось бы добавлять форму и Application, но Handle нужен, для нормальной работы иконке в трее. Сразу оговорюсь, что это не троян, это мой резидент/драйвер для работы ДУ через COM-порт
← →
alex_*** (2003-12-26 17:45) [1]Handle модуля: hInstance.
← →
jack128 (2003-12-26 17:47) [2]создать окно на апи, если с Forms связоваться не хочешь..С Сети примров навалом...
← →
alex_*** (2003-12-26 17:50) [3]в rx есть компонент для tray, где создается свое невидимое окно, которое ловит сообщения от tray
← →
MScorp (2003-12-26 18:10) [4]а если без создания окна и без компонента?
как-то можно?
← →
jack128 (2003-12-26 18:36) [5]>>а если без создания окна
никак.
← →
Zelius (2003-12-26 18:44) [6]Можно, есть такая ф-ия
function AllocateHWnd(Method: TWndMethod): HWND;
живет в Classes (ее только в D7 туда перенесли, за что огромное им спасибо!). ТТАймер работает через нее.
Я через нее же делал консольное приложение, которое отображает иконку в трее с возможностью скрыть консоль по дабл клику.
← →
jack128 (2003-12-26 18:50) [7]
> Можно, есть такая ф-ия
> function AllocateHWnd(Method: TWndMethod): HWND;
> живет в Classes
угу, в пятерке в Forms она живет. Эта функция как раз и создает окно...
← →
Юрий Зотов (2003-12-26 23:25) [8]> MScorp (26.12.03 18:10) [4]
> а если без создания окна
Никак. Должно быть окно, чья оконная функция будет получать сообщения "от иконки". Обычно оно невидимое, но без него - никак. Иначе как же обрабатывать эти сообщения? Сама структура NOTIFYICONDATA заточена именно под окно, и ничего уж тут не поделаешь.
> и без компонента?
А вот это запросто. См. [2].
← →
Mystic (2003-12-27 11:54) [9]Вот пример из MSDN окна на чистом API.
Как видишь, не так уж много. Рекомендую перевести на Delphi, заставь работать... Потом выкинуть ShowWindow и UpdateWindow и наращивать функциональность: проинициализировать иконку в трее, внутри MainWndProc обрабатывать сообщения, ...
#include <windows.h>
// Global variable
HINSTANCE hinst;
// Function prototypes.
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
InitApplication(HINSTANCE);
InitInstance(HINSTANCE, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
// Application entry point.
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
if (!InitApplication(hinstance))
return FALSE;
if (!InitInstance(hinstance, nCmdShow))
return FALSE;
while (GetMessage(&msg, (HWND) NULL, 0, 0) != 0 && GetMessage(&msg, (HWND) NULL, 0, 0) != -1)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
UNREFERENCED_PARAMETER(lpCmdLine);
}
BOOL InitApplication(HINSTANCE hinstance)
{
WNDCLASSEX wcx;
// Fill in the window class structure with parameters
// that describe the main window.
wcx.cbSize = sizeof(wcx); // size of structure
wcx.style = CS_HREDRAW |
CS_VREDRAW; // redraw if size changes
wcx.lpfnWndProc = MainWndProc; // points to window procedure
wcx.cbClsExtra = 0; // no extra class memory
wcx.cbWndExtra = 0; // no extra window memory
wcx.hInstance = hinstance; // handle to instance
wcx.hIcon = LoadIcon(NULL,
IDI_APPLICATION); // predefined app. icon
wcx.hCursor = LoadCursor(NULL,
IDC_ARROW); // predefined arrow
wcx.hbrBackground = GetStockObject(
WHITE_BRUSH); // white background brush
wcx.lpszMenuName = "MainMenu"; // name of menu resource
wcx.lpszClassName = "MainWClass"; // name of window class
wcx.hIconSm = LoadImage(hinstance, // small class icon
MAKEINTRESOURCE(5),
IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
LR_DEFAULTCOLOR);
// Register the window class.
return RegisterClassEx(&wcx);
}
BOOL InitInstance(HINSTANCE hinstance, int nCmdShow)
{
HWND hwnd;
// Save the application-instance handle.
hinst = hinstance;
// Create the main window.
hwnd = CreateWindow(
"MainWClass", // name of window class
"Sample", // title-bar string
WS_OVERLAPPEDWINDOW, // top-level window
CW_USEDEFAULT, // default horizontal position
CW_USEDEFAULT, // default vertical position
CW_USEDEFAULT, // default width
CW_USEDEFAULT, // default height
(HWND) NULL, // no owner window
(HMENU) NULL, // use class menu
hinstance, // handle to application instance
(LPVOID) NULL); // no window-creation data
if (!hwnd)
return FALSE;
// Show the window and send a WM_PAINT message to the window
// procedure.
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
return TRUE;
}
LRESULT CALLBACK MainWndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam) // second message parameter
{
switch (uMsg)
{
case WM_CREATE:
// Initialize the window.
return 0;
case WM_PAINT:
// Paint the window"s client area.
return 0;
case WM_SIZE:
// Set the size and position of the window.
return 0;
case WM_DESTROY:
// Clean up window-specific data objects.
return 0;
//
// Process other messages.
//
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
Страницы: 1 вся ветка
Текущий архив: 2004.01.13;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.009 c