#include #include #include #include "resource.h" #include "debug.h" #include "nsc.h" typedef struct { HWND hDlg; HWND hwndNSC; } DLGDATA; BOOL CALLBACK DlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam) { DLGDATA * pdd = (DLGDATA *)GetWindowLong(hDlg, DWL_USER); switch (uMessage) { case WM_INITDIALOG: SetWindowLong(hDlg, DWL_USER, lParam); pdd = (DLGDATA *)lParam; pdd->hDlg = hDlg; pdd->hwndNSC = GetDlgItem(hDlg, IDC_USER1); SetWindowLong(pdd->hwndNSC, GWL_STYLE, NSS_DROPTARGET | GetWindowLong(pdd->hwndNSC, GWL_STYLE)); { NSC_SETROOT sr = {NSSR_CREATEPIDL, NULL, (LPCITEMIDLIST)CSIDL_FAVORITES, 5, NULL}; // NSC_SETROOT sr = {NSSR_CREATEPIDL, NULL, (LPCITEMIDLIST)CSIDL_FAVORITES, 10, NULL}; // SetWindowLong(pdd->hwndNSC, GWL_STYLE, GetWindowLong(pdd->hwndNSC, GWL_STYLE)); SetWindowLong(pdd->hwndNSC, GWL_STYLE, NSS_SHOWNONFOLDERS | GetWindowLong(pdd->hwndNSC, GWL_STYLE)); NameSpace_SetRoot(pdd->hwndNSC, &sr); } break; case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDOK: case IDCANCEL: EndDialog(hDlg, GET_WM_COMMAND_ID(wParam, lParam)); } break; case WM_NOTIFY: switch (((NMHDR *)lParam)->code) { // case PSN_SETACTIVE: // case PSN_APPLY: break; default: return FALSE; } break; default: return FALSE; } return TRUE; } int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, LPSTR pszCmdLine, int nCmdShow) { DLGDATA dd; NameSpace_RegisterClass(hInst); OleInitialize(NULL); DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc, (LPARAM)&dd); OleUninitialize(); return 0; } // stolen from the CRT, used to shirink our code int _stdcall WinMainCRTStartup(void) { int i; STARTUPINFO si; LPSTR pszCmdLine = GetCommandLine(); if ( *pszCmdLine == '\"' ) { /* * Scan, and skip over, subsequent characters until * another double-quote or a null is encountered. */ while ( *++pszCmdLine && (*pszCmdLine != '\"') ); /* * If we stopped on a double-quote (usual case), skip * over it. */ if ( *pszCmdLine == '\"' ) pszCmdLine++; } else { while (*pszCmdLine > ' ') pszCmdLine++; } /* * Skip past any white space preceeding the second token. */ while (*pszCmdLine && (*pszCmdLine <= ' ')) { pszCmdLine++; } si.dwFlags = 0; GetStartupInfoA(&si); i = WinMain(GetModuleHandle(NULL), NULL, pszCmdLine, si.dwFlags & STARTF_USESHOWWINDOW ? si.wShowWindow : SW_SHOWDEFAULT); // Since we now have a way for an extension to tell us when it is finished, // we will terminate all processes when the main thread goes away. ExitProcess(i); return i; // We only come here when we are not the shell... }