📄 getfilename.cpp
字号:
dwTmp = 0;
wcscpy(temp,OPT_URL);
for (n=0;n<5;n++)
{
dwSize =sizeof(value);
_itow(n,temp+4,10);
temp[5]=0;
if ( ERROR_SUCCESS == RegQueryValueEx( hKey, temp, 0, &dwType, ( LPBYTE )value, &dwSize ) )
{
if (wcscmp(value,_T(""))) SendMessage(hwndURL,CB_ADDSTRING,0,(LPARAM)value);
}
}
RegCloseKey( hKey );
}
}
void LoadSort()
{
HKEY hKey = 0;
DWORD dwSize = 0;
DWORD dwType = 0;
DWORD dwTmp;
if ( ERROR_SUCCESS == RegOpenKeyEx( HKEY_LOCAL_MACHINE, REG_BASE, 0, 0, &hKey ) )
{
dwTmp = 0;
dwSize =sizeof(int);
RegQueryValueEx( hKey, _T("SortCol"), 0, &dwType, ( LPBYTE )&SortCol, &dwSize );
RegQueryValueEx( hKey, _T("SortDir"), 0, &dwType, ( LPBYTE )&Dir, &dwSize );
RegCloseKey( hKey );
}
}
void SaveSort()
{
HKEY hKey = 0;
DWORD dwDisp = 0;
int n=0;
if ( ERROR_SUCCESS == RegCreateKeyEx( HKEY_LOCAL_MACHINE, REG_BASE, NULL, 0, 0,
KEY_READ | KEY_WRITE | KEY_SET_VALUE,
NULL, &hKey, &dwDisp ) )
{
RegSetValueEx( hKey, _T("SortCol"), 0, REG_DWORD, ( LPBYTE )&SortCol, sizeof(DWORD));
RegSetValueEx( hKey, _T("SortDir"), 0, REG_DWORD, ( LPBYTE )&Dir, sizeof(DWORD));
RegCloseKey( hKey );
}
}
void SaveRecent()
{
HKEY hKey = 0;
DWORD dwDisp = 0;
TCHAR temp[10];
TCHAR value[200];
int n=0;
if ( ERROR_SUCCESS == RegCreateKeyEx( HKEY_LOCAL_MACHINE, REG_BASE, NULL, 0, 0,
KEY_READ | KEY_WRITE | KEY_SET_VALUE,
NULL, &hKey, &dwDisp ) )
{
wcscpy(temp,OPT_URL);
for (n=0;n<5;n++)
{
_itow(n,temp+4,10);
temp[5]=0;
if (SendMessage(hwndURL,CB_GETLBTEXT,n,(WPARAM)value)!=CB_ERR)
RegSetValueEx( hKey, temp, 0, REG_SZ, ( LPBYTE )value, sizeof(value));
}
RegCloseKey( hKey );
}
}
//
// FUNCTION: InitInstance(HANDLE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
TCHAR Temp[200];
hInst = hInstance; // Store instance handle in our global variable
MyRegisterClass(hInstance, _T("OpenDialog"));
hWnd=hwndMain = CreateWindow(_T("OpenDialog"), _T("Open File"), WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
RECT rc;
GetClientRect(hWnd,&rc);
#ifndef SMART
rc.bottom-=48;
hwndOK=CreateWindow(_T("BUTTON"), _T("OK"), WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,
rc.right-80, rc.top+1, 64, 21, hWnd, NULL, hInstance, NULL);
hwndFolder=CreateWindow(_T("BUTTON"), _T("All"), WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,
(rc.right-rc.left)/2-32, rc.top+1, 64, 21, hWnd, NULL, hInstance, NULL);
HWND hwndCancel=CreateWindow(_T("BUTTON"), _T("Cancel"), WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,
rc.left+16, rc.top+1, 64, 21, hWnd, NULL, hInstance, NULL);
rc.top+=23;
#endif
if (g_webView)
{
hwndURL=CreateWindow(_T("COMBOBOX"), _T(""), WS_VISIBLE|WS_CHILD|WS_BORDER|CBS_AUTOHSCROLL|CBS_DROPDOWN,
rc.left, rc.top+2, rc.right-64, 100, hWnd, NULL, hInstance, NULL);
hwndBrowse=CreateWindow(_T("BUTTON"), _T("Browse"), WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,
rc.right-64, rc.top+1, 64, 21, hWnd, NULL, hInstance, NULL);
rc.top+=23;
rc.bottom-=23;
SetWindowText(hwndURL,FileName);
HistoryPos=0;
FillRecent();
}
InitCommonControls();
if (AllowMulti)
hwndList=CreateWindow(_T("SysListView32"), _T(""), WS_VISIBLE|WS_CHILD|WS_VSCROLL|LVS_REPORT,
rc.left, rc.top, rc.right, rc.bottom, hWnd, NULL, hInstance, NULL);
else
hwndList=CreateWindow(_T("SysListView32"), _T(""), WS_VISIBLE|WS_CHILD|WS_VSCROLL|LVS_REPORT|LVS_SINGLESEL,
rc.left, rc.top, rc.right, rc.bottom, hWnd, NULL, hInstance, NULL);
ListView_SetExtendedListViewStyle(hwndList,LVS_EX_FULLROWSELECT);
HIMAGELIST hwndImage=ImageList_LoadBitmap((HINSTANCE)hmod,MAKEINTRESOURCE(IDB_BITMAP1),16,0,CLR_NONE);
ListView_SetImageList(hwndList,hwndImage,LVSIL_SMALL);
LVCOLUMN lv;
lv.mask=LVCF_TEXT | LVCF_WIDTH ;
lv.fmt=LVCFMT_LEFT ;
lv.cx=120;
lv.pszText=_T("File");
lv.cchTextMax=5;
ListView_InsertColumn(hwndList,0,&lv);
lv.cx=40;
lv.pszText=_T("Type");
ListView_InsertColumn(hwndList,1,&lv);
if (!g_webView)
{
lv.cx=80;
lv.mask=LVCF_TEXT | LVCF_WIDTH | LVCF_FMT ;
lv.fmt=LVCFMT_RIGHT ;
lv.pszText=_T("Size");
}
else
{
lv.cx=500;
lv.mask=LVCF_TEXT | LVCF_WIDTH | LVCF_FMT ;
lv.fmt=LVCFMT_LEFT ;
lv.pszText=_T("URL");
}
ListView_InsertColumn(hwndList,2,&lv);
wcscpy(Temp,CurrentPath);
wcscat(Temp,_T("*.*"));
if (!g_webView) FillWindow(hwndList,Temp);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
oldproc=SetWindowLong(hwndList,GWL_WNDPROC,(long)ListProc);
SetFocus(hwndList);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)&&(IsWindow(hwndMain)))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnregisterClass(_T("OpenDialog"),hInstance);
return NumFiles;
}
void PickItem()
{
TCHAR Temp[200];
LPTSTR current=MultiBuff;
int n=0;
wcscpy(FileName,_T(""));
for (n=0;n<ListView_GetItemCount(hwndList);n++)
{
if (ListView_GetItemState(hwndList,n,LVIS_SELECTED))
{
ListView_GetItemText(hwndList,n,1,Temp,200);
if (!wcscmp(Temp,_T("")))
{
if (!g_webView)
{
wcscpy(Temp,_T(""));
int n=wcslen(CurrentPath)-2;
while(n>0&&(CurrentPath[n]!=_T('\\')))
{
n--;
}
if (n<0) n=0;
CurrentPath[n+1]=0;
wcscpy(Temp,CurrentPath);
wcscat(Temp,_T("*.*"));
FillWindow(hwndList,Temp);
}
else
{
if (HistoryPos>1)
{
HistoryPos-=2;
SetWindowText(hwndURL,History[HistoryPos]);
ParseURL(hwndList,History[HistoryPos]);
}
}
return;
}
else if (wcsstr(Temp,_T("Dir"))!=NULL)
{
if (!g_webView)
{
ListView_GetItemText(hwndList,n,0,Temp,200);
wcscat(CurrentPath,Temp);
wcscat(CurrentPath,_T("\\"));
wcscpy(Temp,CurrentPath);
wcscat(Temp,_T("*.*"));
FillWindow(hwndList,Temp);
}
else
{
ListView_GetItemText(hwndList,n,2,Temp,200);
SetWindowText(hwndURL,Temp);
ParseURL(hwndList,Temp);
}
return;
}
else
{
if (!g_webView)
{
ListView_GetItemText(hwndList,n,0,Temp,200);
wcscpy(FileName,CurrentPath);
}
else
{
wcscpy(FileName,_T(""));
ListView_GetItemText(hwndList,n,2,Temp,200);
}
wcscat(FileName,Temp);
wcscpy(current,FileName);
wcscat(current,_T("\r\n"));
current+=(wcslen(FileName)+2);
NumFiles++;
}
}
}
if (!NumFiles&&(g_webView))
{
TCHAR value[200];
GetWindowText(hwndURL,Temp,200);
wcscpy(current,Temp);
wcscpy(FileName,Temp);
int cur=SendMessage(hwndURL,CB_GETCURSEL,0,0);
if (cur>=0)
{
SendMessage(hwndURL,CB_GETLBTEXT,cur,(WPARAM)value);
if (!wcscmp(value,Temp)) SendMessage(hwndURL,CB_DELETESTRING,cur,0);
}
SendMessage(hwndURL,CB_INSERTSTRING,0,(WPARAM)Temp);
SendMessage(hwndURL,CB_SETCURSEL,0,0);
SaveRecent();
NumFiles=1;
}
wcscat(current,_T("\0\0"));
EnableWindow(g_Parent,true);
DestroyWindow(hwndMain);
}
void PickFolder()
{
TCHAR Temp[200];
LPTSTR current=MultiBuff;
int n=0;
wcscpy(FileName,_T(""));
for (n=0;n<ListView_GetItemCount(hwndList);n++)
{
ListView_GetItemText(hwndList,n,1,Temp,200);
if (!wcscmp(Temp,_T("")))
{
}
else if (wcsstr(Temp,_T("Dir"))!=NULL)
{
}
else
{
if (!g_webView)
{
ListView_GetItemText(hwndList,n,0,Temp,200);
wcscpy(FileName,CurrentPath);
}
else
{
wcscpy(FileName,_T(""));
ListView_GetItemText(hwndList,n,2,Temp,200);
}
wcscat(FileName,Temp);
wcscpy(current,FileName);
wcscat(current,_T("\r\n"));
current+=(wcslen(FileName)+2);
NumFiles++;
}
}
if (NumFiles)
{
wcscat(current,_T("\0\0"));
EnableWindow(g_Parent,true);
DestroyWindow(hwndMain);
}
}
LRESULT CALLBACK ListProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_KEYDOWN:
if (wParam == vkCtrl)
{
keybd_event(VK_CONTROL,1,0,0);
KeyDown=true;
return 0;
}
if (wParam == 13)
{
int n;
for (n=0;n<ListView_GetItemCount(hwndList);n++)
{
if (ListView_GetItemState(hwndList,n,LVIS_SELECTED))
{
SelectedRow=n;
PickItem();
}
}
}
#if (_WIN32_WCE >= 300)||(defined(_X86_))
return CallWindowProc((WNDPROC)oldproc,hWnd,message,wParam,lParam);
#else
return CallWindowProc((int (__cdecl *)(void))oldproc,hWnd,message,wParam,lParam);
#endif
break;
case WM_KEYUP:
if (wParam == vkCtrl)
{
keybd_event(VK_CONTROL,1,KEYEVENTF_KEYUP,0);
KeyDown=false;
return 0;
}
#ifdef SMART
if (wParam==113)
{
LVITEM lv;
for (int n=0;n<ListView_GetItemCount(hwndList);n++)
{
lv.iItem=n;
lv.mask=LVIF_PARAM;
ListView_GetItem(hwndList,&lv);
if (lv.lParam) delete (entry*)lv.lParam;
}
EnableWindow(g_Parent,true);
DestroyWindow(hwndMain);
}
if (wParam==112)
{
PickFolder();
}
#endif
#if (_WIN32_WCE >= 300)||(defined(_X86_))
return CallWindowProc((WNDPROC)oldproc,hWnd,message,wParam,lParam);
#else
return CallWindowProc((int (__cdecl *)(void))oldproc,hWnd,message,wParam,lParam);
#endif
break;
default:
#if (_WIN32_WCE >= 300)||(defined(_X86_))
return CallWindowProc((WNDPROC)oldproc,hWnd,message,wParam,lParam);
#else
return CallWindowProc((int (__cdecl *)(void))oldproc,hWnd,message,wParam,lParam);
#endif
break;
}
}
//
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
int wmEvent;
PAINTSTRUCT ps;
switch (message)
{
case WM_NOTIFY:
{
LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)lParam;
if (lpnmlv->hdr.code==LVN_ITEMCHANGED &&(lpnmlv->iItem!=-1))
{
if (lpnmlv->uNewState==3)
SelectedRow=lpnmlv->iItem;
}
if (lpnmlv->hdr.code==NM_CLICK&&(lpnmlv->iItem!=-1)&&(ListView_GetSelectedCount(hwndList)<2)&&(!KeyDown))
{
SelectedRow=lpnmlv->iItem;
PickItem();
}
if (lpnmlv->hdr.code==LVN_COLUMNCLICK)
{
if (SortCol!=lpnmlv->iSubItem)
{
Dir=1;
}
else
{
Dir*=-1;
}
SortCol=lpnmlv->iSubItem;
ListView_SortItems( lpnmlv->hdr.hwndFrom,
ListViewCompareProc,
(LPARAM)(lpnmlv->iSubItem));
}
break;
}
break;
case WM_COMMAND:
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmEvent)
{
case BN_CLICKED:
if ((HWND)lParam==hwndOK)
{
PickItem();
}
else if ((HWND)lParam==hwndFolder)
{
PickFolder();
}
else if ((HWND)lParam==hwndBrowse)
{
TCHAR URL[200];
GetWindowText(hwndURL,URL,200);
if (wcscmp(URL,_T("")))
{
TCHAR value[200];
if (wcsnicmp(URL,_T("http://"),7))
{
wcscpy(value,_T("http://"));
wcscat(value,URL);
SetWindowText(hwndURL,value);
wcscpy(URL,value);
}
int cur=SendMessage(hwndURL,CB_GETCURSEL,0,0);
if (cur>=0)
{
SendMessage(hwndURL,CB_GETLBTEXT,cur,(WPARAM)value);
if (!wcscmp(value,URL)) SendMessage(hwndURL,CB_DELETESTRING,cur,0);
}
SendMessage(hwndURL,CB_INSERTSTRING,0,(WPARAM)URL);
SendMessage(hwndURL,CB_SETCURSEL,0,0);
SaveRecent();
HistoryPos=0;
ParseURL(hwndList,URL);
}
}
else
{
LVITEM lv;
for (int n=0;n<ListView_GetItemCount(hwndList);n++)
{
lv.iItem=n;
lv.mask=LVIF_PARAM;
ListView_GetItem(hwndList,&lv);
if (lv.lParam) delete (entry*)lv.lParam;
}
EnableWindow(g_Parent,true);
DestroyWindow(hWnd);
}
break;
}
break;
case WM_DESTROY:
SetWindowLong(hwndList,GWL_WNDPROC,(long)oldproc);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// This is an example of an exported function.
GETFILENAME_API int fnGetFileName(HWND Parent,LPTSTR Filter, LPTSTR initialDir, LPTSTR OutFileName, int MaxFileName,LPTSTR* szMultiBuff,unsigned int vkctrl,int webview)
{
int ret;
bEnd=false;
g_Parent=Parent;
g_webView=webview;
vkCtrl=vkctrl;
EnableWindow(Parent,false);
wcscpy(g_Filter,Filter);
wcsupr(g_Filter);
wcscpy(FileName,OutFileName);
if (initialDir) wcscpy(CurrentPath,initialDir);
NumFiles=0;
AllowMulti=(szMultiBuff!=NULL);
LoadSort();
ret=InitInstance ((HINSTANCE)hmod, SW_SHOW);
SaveSort();
wcscpy(OutFileName,FileName);
if (szMultiBuff) *szMultiBuff=MultiBuff;
return ret;
}
// This is the constructor of a class that has been exported.
// see GetFileName.h for the class definition
CGetFileName::CGetFileName()
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -