diff options
Diffstat (limited to 'src/os/win32/ngx_gui.c')
-rw-r--r-- | src/os/win32/ngx_gui.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/os/win32/ngx_gui.c b/src/os/win32/ngx_gui.c new file mode 100644 index 000000000..5673820d2 --- /dev/null +++ b/src/os/win32/ngx_gui.c @@ -0,0 +1,85 @@ + +/* + * Copyright (C) Igor Sysoev + */ + + +#include <ngx_config.h> +#include <ngx_core.h> + + +#define NGX_MAX_TEXT 2048 + + +void ngx_message_box(char *title, ngx_uint_t type, ngx_err_t err, + const char *fmt, ...) +{ + va_list args; + u_char text[NGX_MAX_TEXT], *p, *last; + + last = text + NGX_MAX_TEXT; + + va_start(args, fmt); + p = ngx_vsnprintf(text, NGX_MAX_TEXT, fmt, args); + va_end(args); + + if (err) { + + if (p > last - 50) { + + /* leave a space for an error code */ + + p = last - 50; + *p++ = '.'; + *p++ = '.'; + *p++ = '.'; + } + + if ((unsigned) err >= 0x80000000) { + p = ngx_snprintf(p, last - p, " (%Xd: ", err); + + } else { + p = ngx_snprintf(p, last - p, " (%d: ", err); + } + + p = ngx_strerror_r(err, p, last - p); + + if (p < last) { + *p++ = ')'; + } + } + + if (p == last) { + p--; + } + + *p = '\0'; + + MessageBox(NULL, (char *) text, title, type); +} + + +ngx_int_t ngx_system_tray_icon(HWND window, u_long action, + HICON icon, u_char *tip) +{ + NOTIFYICONDATA ni; + + ni.cbSize = sizeof(NOTIFYICONDATA); + ni.hWnd = window; + ni.uID = 0; + ni.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP; + ni.uCallbackMessage = NGX_WM_TRAY; + ni.hIcon = icon; + + if (tip) { + ngx_cpystrn((u_char *) ni.szTip, tip, 64); + } else { + ni.szTip[0] = '\0'; + } + + if (Shell_NotifyIcon(action, &ni) == 0) { + return NGX_ERROR; + } + + return NGX_OK; +} |