[code]// wifiAvailable.cpp : 응용 프로그램에 대한 진입점을 정의합니다.
//
#include "stdafx.h"
#include "wifiAvailable.h"
#include <windows.h>
#include <commctrl.h>
#define MAX_LOADSTRING 100
// 전역 변수:
HINSTANCE g_hInst; // 현재 인스턴스입니다.
HWND g_hWndMenuBar; // 메뉴 모음 핸들입니다.
// 이 코드 모듈에 들어 있는 함수의 정방향 선언입니다.
ATOM MyRegisterClass(HINSTANCE, LPTSTR);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
#include <regext.h>
#include "snapi.h"
#pragma comment(lib, "aygshell.lib")
#define WM_OFFSET 10000
#define WM_CHANGE_WIFI_AVAILABLE (WM_OFFSET + 1)
#define WM_CHANGE_WIFI_PRESENT (WM_OFFSET + 2)
#define WM_CHANGE_WIFI_POWERON (WM_OFFSET + 3)
#define WM_CHANGE_WIFI_CONNECTING (WM_OFFSET + 4)
#define WM_CHANGE_WIFI_CONNECTED (WM_OFFSET + 5)
#define NOTIFY_CNT 5
HREGNOTIFY g_hNotify[NOTIFY_CNT]; // Handles to notifications
HWND g_hCurWndDialog; // Primary Window Dialog
HRESULT UnregisterWindows()
{
printf("Unregister windows\n");
long lNotifyIndx;
// For each notification handle:
for (lNotifyIndx=0; lNotifyIndx < NOTIFY_CNT; lNotifyIndx++)
{
if (g_hNotify[lNotifyIndx] != NULL)
{
// Close off the notification.
RegistryCloseNotification(g_hNotify[lNotifyIndx]);
}
g_hNotify[lNotifyIndx] = 0;
}
return S_OK;
}
HRESULT RegisterWindows()
{
UnregisterWindows();
printf("register windows\n");
HRESULT hr;
NOTIFICATIONCONDITION nc;
//////////////////////////////////////////////////////////////////////////
nc.ctComparisonType = REG_CT_ANYCHANGE;
nc.dwMask = SN_WIFISTATENETWORKSAVAILABLE_BITMASK;
nc.TargetValue.dw = 0;
hr = RegistryNotifyWindow(
SN_WIFISTATENETWORKSAVAILABLE_ROOT,
SN_WIFISTATENETWORKSAVAILABLE_PATH,
SN_WIFISTATENETWORKSAVAILABLE_VALUE,
g_hCurWndDialog,
WM_CHANGE_WIFI_AVAILABLE, // This notification uses a custom window message.
0,
&nc,
&g_hNotify[0]
);
if (FAILED(hr))
{
printf("error reg 1\n");
goto Error;
}
///////////////////////////////////////////////////////////////////////
nc.ctComparisonType = REG_CT_ANYCHANGE;
nc.dwMask = SN_WIFISTATEHARDWAREPRESENT_BITMASK;
nc.TargetValue.dw = 0;
hr = RegistryNotifyWindow(
SN_WIFISTATEHARDWAREPRESENT_ROOT,
SN_WIFISTATEHARDWAREPRESENT_PATH,
SN_WIFISTATEHARDWAREPRESENT_VALUE,
g_hCurWndDialog,
WM_CHANGE_WIFI_PRESENT, // This notification uses a custom window message.
0,
&nc,
&g_hNotify[1]
);
if (FAILED(hr))
{
printf("error reg 2\n");
goto Error;
}
///////////////////////////////////////////////////////////////////////
nc.ctComparisonType = REG_CT_ANYCHANGE;
nc.dwMask = SN_WIFISTATEPOWERON_BITMASK;
nc.TargetValue.dw = 0;
hr = RegistryNotifyWindow(
SN_WIFISTATEPOWERON_ROOT,
SN_WIFISTATEPOWERON_PATH,
SN_WIFISTATEPOWERON_VALUE,
g_hCurWndDialog,
WM_CHANGE_WIFI_POWERON, // This notification uses a custom window message.
0,
&nc,
&g_hNotify[2]
);
if (FAILED(hr))
{
printf("error reg 3\n");
goto Error;
}
///////////////////////////////////////////////////////////////////////
nc.ctComparisonType = REG_CT_ANYCHANGE;
nc.dwMask = SN_WIFISTATECONNECTING_BITMASK;
nc.TargetValue.dw = 0;
hr = RegistryNotifyWindow(
SN_WIFISTATECONNECTING_ROOT,
SN_WIFISTATECONNECTING_PATH,
SN_WIFISTATECONNECTING_VALUE,
g_hCurWndDialog,
WM_CHANGE_WIFI_CONNECTING, // This notification uses a custom window message.
0,
&nc,
&g_hNotify[3]
);
if (FAILED(hr))
{
printf("error reg 4\n");
goto Error;
}
///////////////////////////////////////////////////////////////////////
nc.ctComparisonType = REG_CT_ANYCHANGE;
nc.dwMask = SN_WIFISTATECONNECTED_BITMASK;
nc.TargetValue.dw = 0;
hr = RegistryNotifyWindow(
SN_WIFISTATECONNECTED_ROOT,
SN_WIFISTATECONNECTED_PATH,
SN_WIFISTATECONNECTED_VALUE,
g_hCurWndDialog,
WM_CHANGE_WIFI_CONNECTED, // This notification uses a custom window message.
0,
&nc,
&g_hNotify[4]
);
if (FAILED(hr))
{
printf("error reg 5\n");
goto Error;
}
printf("reg ok\n");
Error:
return hr;
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
// 응용 프로그램 초기화를 수행합니다.
if (!InitInstance(hInstance, nCmdShow))
{
return FALSE;
}
HACCEL hAccelTable;
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIFIAVAILABLE));
// 기본 메시지 루프입니다.
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
//
// 함수: MyRegisterClass()
//
// 목적: 창 클래스를 등록합니다.
//
// 설명:
//
ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIFIAVAILABLE));
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = szWindowClass;
return RegisterClass(&wc);
}
//
// 함수: InitInstance(HINSTANCE, int)
//
// 목적: 인스턴스 핸들을 저장하고 주 창을 만듭니다.
//
// 설명:
//
// 이 함수를 통해 인스턴스 핸들을 전역 변수에 저장하고
// 주 프로그램 창을 만든 다음 표시합니다.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
TCHAR szTitle[MAX_LOADSTRING]; // 제목 표시줄 텍스트
TCHAR szWindowClass[MAX_LOADSTRING]; // 주 창 클래스 이름
g_hInst = hInstance; // 인스턴스 핸들을 전역 변수에 저장합니다.
// CAPEDIT 및 SIPPREF와 같은 모든 장치 특수 컨트롤을 초기화하기 위해
// 응용 프로그램을 초기화하는 동안 SHInitExtraControls를 한 번 호출해야 합니다.
SHInitExtraControls();
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_WIFIAVAILABLE, szWindowClass, MAX_LOADSTRING);
//이미 실행 중인 경우 창에 포커스를 둔 다음 끝냅니다.
hWnd = FindWindow(szWindowClass, szTitle);
if (hWnd)
{
// 맨 앞 자식 창에 포커스를 설정합니다.
// "| 0x00000001"을 사용하여 소유한 모든 창을 전경으로 보낸 다음
// 활성화합니다.
SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001));
return 0;
}
if (!MyRegisterClass(hInstance, szWindowClass))
{
return FALSE;
}
hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
g_hCurWndDialog = hWnd;
// CW_USEDEFAULT를 사용하여 주 창을 만드는 경우 메뉴 모음의 높이는
// 고려되지 않습니다. 따라서 메뉴 모음이 있는 경우
// 창을 만든 후 창의 크기를 조정합니다.
if (g_hWndMenuBar)
{
RECT rc;
RECT rcMenuBar;
GetWindowRect(hWnd, &rc);
GetWindowRect(g_hWndMenuBar, &rcMenuBar);
rc.bottom -= (rcMenuBar.bottom - rcMenuBar.top);
MoveWindow(hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, FALSE);
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
RegisterWindows();
return TRUE;
}
//
// 함수: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 목적: 주 창의 메시지를 처리합니다.
//
// WM_COMMAND - 응용 프로그램 메뉴를 처리합니다.
// WM_PAINT - 주 창을 그립니다.
// WM_DESTROY - 종료 메시지를 게시하고 반환합니다.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static SHACTIVATEINFO s_sai;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 메뉴의 선택 영역을 구문 분석합니다.
switch (wmId)
{
case IDM_HELP_ABOUT:
DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);
break;
case IDM_OK:
SendMessage (hWnd, WM_CLOSE, 0, 0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_CREATE:
SHMENUBARINFO mbi;
memset(&mbi, 0, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.hwndParent = hWnd;
mbi.nToolBarId = IDR_MENU;
mbi.hInstRes = g_hInst;
if (!SHCreateMenuBar(&mbi))
{
g_hWndMenuBar = NULL;
}
else
{
g_hWndMenuBar = mbi.hwndMB;
}
// 셸 활성화 정보 구조 초기화
memset(&s_sai, 0, sizeof (s_sai));
s_sai.cbSize = sizeof (s_sai);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 여기에 그리기 코드를 추가합니다.
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
CommandBar_Destroy(g_hWndMenuBar);
PostQuitMessage(0);
break;
case WM_ACTIVATE:
// 활성화 메시지를 셸에 알립니다.
SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);
break;
case WM_SETTINGCHANGE:
SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);
break;
case WM_CHANGE_WIFI_AVAILABLE:
printf("wifi available\n");
//::MessageBox(NULL, L"WIFI AVAILABLE", L"OK", MB_OK);
break;
case WM_CHANGE_WIFI_PRESENT:
printf("wifi present\n");
//::MessageBox(NULL, L"WIFI PRESENT", L"OK", MB_OK);
break;
case WM_CHANGE_WIFI_POWERON:
printf("wifi power on\n");
//::MessageBox(NULL, L"WIFI power on", L"OK", MB_OK);
break;
case WM_CHANGE_WIFI_CONNECTING:
printf("wifi power CONNECTING\n");
//::MessageBox(NULL, L"WIFI power on", L"OK", MB_OK);
break;
case WM_CHANGE_WIFI_CONNECTED:
printf("wifi power CONNECTED\n");
//::MessageBox(NULL, L"WIFI power on", L"OK", MB_OK);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// 정보 대화 상자의 메시지 처리기입니다.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
// [완료] 단추를 만들고 크기를 조정합니다.
SHINITDLGINFO shidi;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_EMPTYMENU;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
}
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_CLOSE:
EndDialog(hDlg, message);
return TRUE;
}
return (INT_PTR)FALSE;
}
[/code]
//
#include "stdafx.h"
#include "wifiAvailable.h"
#include <windows.h>
#include <commctrl.h>
#define MAX_LOADSTRING 100
// 전역 변수:
HINSTANCE g_hInst; // 현재 인스턴스입니다.
HWND g_hWndMenuBar; // 메뉴 모음 핸들입니다.
// 이 코드 모듈에 들어 있는 함수의 정방향 선언입니다.
ATOM MyRegisterClass(HINSTANCE, LPTSTR);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
#include <regext.h>
#include "snapi.h"
#pragma comment(lib, "aygshell.lib")
#define WM_OFFSET 10000
#define WM_CHANGE_WIFI_AVAILABLE (WM_OFFSET + 1)
#define WM_CHANGE_WIFI_PRESENT (WM_OFFSET + 2)
#define WM_CHANGE_WIFI_POWERON (WM_OFFSET + 3)
#define WM_CHANGE_WIFI_CONNECTING (WM_OFFSET + 4)
#define WM_CHANGE_WIFI_CONNECTED (WM_OFFSET + 5)
#define NOTIFY_CNT 5
HREGNOTIFY g_hNotify[NOTIFY_CNT]; // Handles to notifications
HWND g_hCurWndDialog; // Primary Window Dialog
HRESULT UnregisterWindows()
{
printf("Unregister windows\n");
long lNotifyIndx;
// For each notification handle:
for (lNotifyIndx=0; lNotifyIndx < NOTIFY_CNT; lNotifyIndx++)
{
if (g_hNotify[lNotifyIndx] != NULL)
{
// Close off the notification.
RegistryCloseNotification(g_hNotify[lNotifyIndx]);
}
g_hNotify[lNotifyIndx] = 0;
}
return S_OK;
}
HRESULT RegisterWindows()
{
UnregisterWindows();
printf("register windows\n");
HRESULT hr;
NOTIFICATIONCONDITION nc;
//////////////////////////////////////////////////////////////////////////
nc.ctComparisonType = REG_CT_ANYCHANGE;
nc.dwMask = SN_WIFISTATENETWORKSAVAILABLE_BITMASK;
nc.TargetValue.dw = 0;
hr = RegistryNotifyWindow(
SN_WIFISTATENETWORKSAVAILABLE_ROOT,
SN_WIFISTATENETWORKSAVAILABLE_PATH,
SN_WIFISTATENETWORKSAVAILABLE_VALUE,
g_hCurWndDialog,
WM_CHANGE_WIFI_AVAILABLE, // This notification uses a custom window message.
0,
&nc,
&g_hNotify[0]
);
if (FAILED(hr))
{
printf("error reg 1\n");
goto Error;
}
///////////////////////////////////////////////////////////////////////
nc.ctComparisonType = REG_CT_ANYCHANGE;
nc.dwMask = SN_WIFISTATEHARDWAREPRESENT_BITMASK;
nc.TargetValue.dw = 0;
hr = RegistryNotifyWindow(
SN_WIFISTATEHARDWAREPRESENT_ROOT,
SN_WIFISTATEHARDWAREPRESENT_PATH,
SN_WIFISTATEHARDWAREPRESENT_VALUE,
g_hCurWndDialog,
WM_CHANGE_WIFI_PRESENT, // This notification uses a custom window message.
0,
&nc,
&g_hNotify[1]
);
if (FAILED(hr))
{
printf("error reg 2\n");
goto Error;
}
///////////////////////////////////////////////////////////////////////
nc.ctComparisonType = REG_CT_ANYCHANGE;
nc.dwMask = SN_WIFISTATEPOWERON_BITMASK;
nc.TargetValue.dw = 0;
hr = RegistryNotifyWindow(
SN_WIFISTATEPOWERON_ROOT,
SN_WIFISTATEPOWERON_PATH,
SN_WIFISTATEPOWERON_VALUE,
g_hCurWndDialog,
WM_CHANGE_WIFI_POWERON, // This notification uses a custom window message.
0,
&nc,
&g_hNotify[2]
);
if (FAILED(hr))
{
printf("error reg 3\n");
goto Error;
}
///////////////////////////////////////////////////////////////////////
nc.ctComparisonType = REG_CT_ANYCHANGE;
nc.dwMask = SN_WIFISTATECONNECTING_BITMASK;
nc.TargetValue.dw = 0;
hr = RegistryNotifyWindow(
SN_WIFISTATECONNECTING_ROOT,
SN_WIFISTATECONNECTING_PATH,
SN_WIFISTATECONNECTING_VALUE,
g_hCurWndDialog,
WM_CHANGE_WIFI_CONNECTING, // This notification uses a custom window message.
0,
&nc,
&g_hNotify[3]
);
if (FAILED(hr))
{
printf("error reg 4\n");
goto Error;
}
///////////////////////////////////////////////////////////////////////
nc.ctComparisonType = REG_CT_ANYCHANGE;
nc.dwMask = SN_WIFISTATECONNECTED_BITMASK;
nc.TargetValue.dw = 0;
hr = RegistryNotifyWindow(
SN_WIFISTATECONNECTED_ROOT,
SN_WIFISTATECONNECTED_PATH,
SN_WIFISTATECONNECTED_VALUE,
g_hCurWndDialog,
WM_CHANGE_WIFI_CONNECTED, // This notification uses a custom window message.
0,
&nc,
&g_hNotify[4]
);
if (FAILED(hr))
{
printf("error reg 5\n");
goto Error;
}
printf("reg ok\n");
Error:
return hr;
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
// 응용 프로그램 초기화를 수행합니다.
if (!InitInstance(hInstance, nCmdShow))
{
return FALSE;
}
HACCEL hAccelTable;
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIFIAVAILABLE));
// 기본 메시지 루프입니다.
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
//
// 함수: MyRegisterClass()
//
// 목적: 창 클래스를 등록합니다.
//
// 설명:
//
ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIFIAVAILABLE));
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = szWindowClass;
return RegisterClass(&wc);
}
//
// 함수: InitInstance(HINSTANCE, int)
//
// 목적: 인스턴스 핸들을 저장하고 주 창을 만듭니다.
//
// 설명:
//
// 이 함수를 통해 인스턴스 핸들을 전역 변수에 저장하고
// 주 프로그램 창을 만든 다음 표시합니다.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
TCHAR szTitle[MAX_LOADSTRING]; // 제목 표시줄 텍스트
TCHAR szWindowClass[MAX_LOADSTRING]; // 주 창 클래스 이름
g_hInst = hInstance; // 인스턴스 핸들을 전역 변수에 저장합니다.
// CAPEDIT 및 SIPPREF와 같은 모든 장치 특수 컨트롤을 초기화하기 위해
// 응용 프로그램을 초기화하는 동안 SHInitExtraControls를 한 번 호출해야 합니다.
SHInitExtraControls();
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_WIFIAVAILABLE, szWindowClass, MAX_LOADSTRING);
//이미 실행 중인 경우 창에 포커스를 둔 다음 끝냅니다.
hWnd = FindWindow(szWindowClass, szTitle);
if (hWnd)
{
// 맨 앞 자식 창에 포커스를 설정합니다.
// "| 0x00000001"을 사용하여 소유한 모든 창을 전경으로 보낸 다음
// 활성화합니다.
SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001));
return 0;
}
if (!MyRegisterClass(hInstance, szWindowClass))
{
return FALSE;
}
hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
g_hCurWndDialog = hWnd;
// CW_USEDEFAULT를 사용하여 주 창을 만드는 경우 메뉴 모음의 높이는
// 고려되지 않습니다. 따라서 메뉴 모음이 있는 경우
// 창을 만든 후 창의 크기를 조정합니다.
if (g_hWndMenuBar)
{
RECT rc;
RECT rcMenuBar;
GetWindowRect(hWnd, &rc);
GetWindowRect(g_hWndMenuBar, &rcMenuBar);
rc.bottom -= (rcMenuBar.bottom - rcMenuBar.top);
MoveWindow(hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, FALSE);
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
RegisterWindows();
return TRUE;
}
//
// 함수: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 목적: 주 창의 메시지를 처리합니다.
//
// WM_COMMAND - 응용 프로그램 메뉴를 처리합니다.
// WM_PAINT - 주 창을 그립니다.
// WM_DESTROY - 종료 메시지를 게시하고 반환합니다.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static SHACTIVATEINFO s_sai;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 메뉴의 선택 영역을 구문 분석합니다.
switch (wmId)
{
case IDM_HELP_ABOUT:
DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);
break;
case IDM_OK:
SendMessage (hWnd, WM_CLOSE, 0, 0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_CREATE:
SHMENUBARINFO mbi;
memset(&mbi, 0, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.hwndParent = hWnd;
mbi.nToolBarId = IDR_MENU;
mbi.hInstRes = g_hInst;
if (!SHCreateMenuBar(&mbi))
{
g_hWndMenuBar = NULL;
}
else
{
g_hWndMenuBar = mbi.hwndMB;
}
// 셸 활성화 정보 구조 초기화
memset(&s_sai, 0, sizeof (s_sai));
s_sai.cbSize = sizeof (s_sai);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 여기에 그리기 코드를 추가합니다.
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
CommandBar_Destroy(g_hWndMenuBar);
PostQuitMessage(0);
break;
case WM_ACTIVATE:
// 활성화 메시지를 셸에 알립니다.
SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);
break;
case WM_SETTINGCHANGE:
SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);
break;
case WM_CHANGE_WIFI_AVAILABLE:
printf("wifi available\n");
//::MessageBox(NULL, L"WIFI AVAILABLE", L"OK", MB_OK);
break;
case WM_CHANGE_WIFI_PRESENT:
printf("wifi present\n");
//::MessageBox(NULL, L"WIFI PRESENT", L"OK", MB_OK);
break;
case WM_CHANGE_WIFI_POWERON:
printf("wifi power on\n");
//::MessageBox(NULL, L"WIFI power on", L"OK", MB_OK);
break;
case WM_CHANGE_WIFI_CONNECTING:
printf("wifi power CONNECTING\n");
//::MessageBox(NULL, L"WIFI power on", L"OK", MB_OK);
break;
case WM_CHANGE_WIFI_CONNECTED:
printf("wifi power CONNECTED\n");
//::MessageBox(NULL, L"WIFI power on", L"OK", MB_OK);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// 정보 대화 상자의 메시지 처리기입니다.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
// [완료] 단추를 만들고 크기를 조정합니다.
SHINITDLGINFO shidi;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_EMPTYMENU;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
}
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_CLOSE:
EndDialog(hDlg, message);
return TRUE;
}
return (INT_PTR)FALSE;
}
[/code]
'Windows > MFC' 카테고리의 다른 글
windows mobile hosts file (0) | 2013.10.02 |
---|---|
Free ebook: Petzold’s Programming Windows Phone 7 (Special Excerpt 2) (0) | 2013.10.02 |
release mode 에서 debuging 하기 (0) | 2013.10.02 |
nfs (0) | 2013.10.02 |
error LNK2019: __security_cookie (0) | 2013.10.02 |