/* ShellExecuteでのファイルオープン 1999/ 9/26 宍戸 輝光 */ #include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); HINSTANCE hInst; HWND hwnd; void openFile(LPBYTE,int); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ MSG msg; WNDCLASSEX wndclass ; hInst=hInstance; /* プロセスのハンドルを保存 */ wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "CWindow"; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); RegisterClassEx (&wndclass); hwnd = CreateWindow ("CWindow","ファイルオープン", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,240,240, NULL,NULL,hInstance,NULL); ShowWindow (hwnd,iCmdShow); /* ウインドウを表示 */ UpdateWindow (hwnd); /* 再描画 */ while (GetMessage (&msg,NULL,0,0)) { /* メッセージループ */ TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static HWND hwMenu; HDROP hDrop; static BYTE lpszFn[256],lpszStr[16]; switch (iMsg) { case WM_CREATE: hwMenu=CreateWindow("COMBOBOX","LIST", /* コンボボックス */ WS_CHILD | WS_VISIBLE | WS_BORDER |CBS_DROPDOWNLIST, 8,8,128,128,hwnd,(HMENU)0,hInst,NULL); /* コンボボックスに項目追加 */ SendMessage(hwMenu,CB_ADDSTRING,0,(LPARAM)"Open"); SendMessage(hwMenu,CB_ADDSTRING,0,(LPARAM)"Notepad"); /* デフォルトの項目設定 */ SendMessage(hwMenu,CB_SELECTSTRING,0,(LPARAM)"Open"); DragAcceptFiles(hwnd,TRUE); /* ドラッグ&ドロップ受入 */ break; case WM_DROPFILES: /* ファイルがドロップされた時の処理 */ hDrop=(HDROP)wParam; /* HDROPを取得 */ DragQueryFile(hDrop,0,lpszFn,256); /* ファイル名を取得 */ openFile(lpszFn,SendMessage(hwMenu,CB_GETCURSEL,0,0)); DragFinish(hDrop); /* ドラッグ&ドロップ終了処理 */ break; case WM_DESTROY : PostQuitMessage(0); break; } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; } void openFile(LPBYTE lpszFn,int m) { /* ShellExecute()でファイルを開く */ if (m==0) /* 関連付けられたアプリケーションでファイルを開く */ ShellExecute(NULL,"open",lpszFn,NULL,NULL,SW_SHOWNORMAL); else /* NotePadでファイルを開く */ ShellExecute(NULL,NULL,"notepad",lpszFn,NULL,SW_SHOWNORMAL); }