?? 記事本.cpp
字號:
break;
case IDM_HELP:
MessageBox(hWnd,"這里是記事本幫助\n沒什么可幫助的\n地球人都會用\n^_^","記事本幫助",MB_OK|MB_ICONINFORMATION);
break;
case IDM_V1:
MessageBox(hWnd,"當你看到這個的時候,很遺憾的告訴你:\n這些功能還沒有實現^_^","記事本幫助",MB_OK|MB_ICONINFORMATION);
break;
case IDM_Z:
MessageBox(hWnd,"當你看到這個的時候,很遺憾的告訴你:\n這些功能還沒有實現^_^","記事本幫助",MB_OK|MB_ICONINFORMATION);
break;
case IDM_G:
MessageBox(hWnd,"當你看到這個的時候,很遺憾的告訴你:\n這些功能還沒有實現^_^","記事本幫助",MB_OK|MB_ICONINFORMATION);
break;
case IDM_ALL:
SendMessage(hWndEdit,EM_SETSEL,0,-1);
break;
case IDM_TIME:
MessageBox(hWnd,"當你看到這個的時候,很遺憾的告訴你:\n這些功能還沒有實現^_^","記事本幫助",MB_OK|MB_ICONINFORMATION);
break;
case IDM_L:
MessageBox(hWnd,"當你看到這個的時候,很遺憾的告訴你:\n這些功能還沒有實現^_^","記事本幫助",MB_OK|MB_ICONINFORMATION);
break;
case IDM_N:
MessageBox(hWnd,"當你看到這個的時候,很遺憾的告訴你:\n這些功能還沒有實現^_^","記事本幫助",MB_OK|MB_ICONINFORMATION);
break;
}
break;
case WM_DROPFILES: //當有文件被拖入窗口并放下時激發此消息
HDROP hDropInfo; //HDROP句柄,用以存放拖入文件的信息
hDropInfo=(HDROP)wParam; //初始化 hDropInfo(不進行初始化運行會出錯)
hDC=GetDC(hWnd);
ShowFileInfo(hWnd,hDC,hDropInfo);
DragFinish(hDropInfo);
ReleaseDC(hWnd,hDC);
flag1=true; //打開了一個文件,flag=true
flag4=false; //打開了一個文件,還未保存,flag4=false
return 0;
case WM_CLOSE: // 窗口關閉前的消息(比如用戶點了關閉按鈕)
DWORD dwFileSize;
dwFileSize=SendMessage(hWndEdit,WM_GETTEXTLENGTH,0,0);
if((flag1==true||flag2==true)&&flag4==false) //如果新建了文件或打開了文件
{ //并且文件沒有被保存過
if(dwFileSize!=0) //如果編輯框內容不為空
{
int t;
t=::MessageBox(NULL,"文件還未保存,是否要保存?","提示",MB_YESNOCANCEL|MB_ICONINFORMATION);
if(t==IDYES)
{
SendMessage(hWnd,WM_COMMAND,IDM_SERVES,0L); //保存文件
DestroyWindow(hWnd); //毀滅窗口
return 0;
}
else if(t==IDCANCEL)
{
return 0;
}
}
}
DestroyWindow(hWnd);
return 0; // 此時Windows還根本沒有對窗口做任何事,可以用MessageBox來測試
case WM_DESTROY: // 窗口關閉以后的消息,此時Windows已經毀壞了窗口
DragAcceptFiles(hWnd,FALSE);
PostQuitMessage(0);
return 0;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
return 0;
}
//=============================================================================================
//==============================調用函數=======================================================
//=============================================================================================
BOOL FileToEditBox(HWND hwnd, LPSTR lpszFileName)
{
DWORD dwFileSize,dwByteRead; //文件大小,文件讀入字節
char *lpBufPtr=NULL; //文件緩沖區
//打開文件
hFile=CreateFile(lpszFileName, //文件名
GENERIC_READ, //只進行讀文件操作
FILE_SHARE_READ, //讀方式:共享讀
NULL,
OPEN_EXISTING, //打開一個文件,如果文件不存在,函數失敗
FILE_ATTRIBUTE_NORMAL, //常規文件
(HANDLE)NULL);
if(hFile!=INVALID_HANDLE_VALUE) //若打開文件成功
{
dwFileSize=GetFileSize(hFile,NULL); //讀取文件大小
if(dwFileSize!=0xFFFFFFFF) //若讀取文件大小成功
{
lpBufPtr=(char*)malloc(dwFileSize); //開辟文件緩沖區
if(lpBufPtr!=NULL) //若開辟文件緩沖區成功
{
//讀取文件
ReadFile(hFile, //文件句柄
(LPVOID)lpBufPtr, //文件緩沖區指針
dwFileSize, //文件大小
&dwByteRead, //記錄讀入了多少字節
NULL); //從文件當前位置讀取
if(dwByteRead!=0) //若讀取文件成功
{
//將文件寫入編輯框
SendMessage(hWndEdit,WM_SETTEXT,0,(LPARAM)lpBufPtr);
}
else
{
MessageBox(NULL,"讀入字節數為 0 ","",0);
free(lpBufPtr);
return 0;
}
}
else
{
MessageBox(hwnd,"內存分配失敗","",0);
return 0;
}
}
else
{
MessageBox(hwnd,"獲取文件大小失敗","",0);
return 0;
}
}
else
{
MessageBox(hwnd,"打開文件失敗","",0);
return 0;
}
CloseHandle(hFile);
return 1;
}
BOOL EditBoxToFile(HWND hwnd,LPCTSTR lpszFileName)
{
DWORD dwFileSize,dwByteWrite; //文件大小,已寫入的字節數
char *lpBufPtr=NULL; //文件緩沖區
hFile=CreateFile(lpszFileName,
GENERIC_READ|GENERIC_WRITE, //讀寫文件
FILE_SHARE_WRITE, //寫方式:共享寫
NULL,
CREATE_ALWAYS, //創建一個文件,如果文件已存在將被重寫
FILE_ATTRIBUTE_NORMAL, //常規文件
(HANDLE)NULL);
if(hFile!=INVALID_HANDLE_VALUE)
{
//讀取編輯框中的文本的大小
dwFileSize=SendMessage(hWndEdit,WM_GETTEXTLENGTH,0,0);
dwFileSize+=1; //文本長度+1,否則丟失最后一個字符
if(dwFileSize!=0) //若讀取文件大小成功
{
lpBufPtr=(char*)malloc(dwFileSize); //開辟文件緩沖區
if(lpBufPtr!=NULL) //若開辟文件緩沖區成功
{
//讀取編輯框中的內容
GetWindowText(hWndEdit,lpBufPtr,dwFileSize);
//將文件緩沖區內容寫入文件
WriteFile(hFile,(LPVOID)lpBufPtr,dwFileSize,&dwByteWrite,NULL);
free(lpBufPtr); //釋放緩沖區
}
else
{
// MessageBox(NULL,"內存分配失敗","",0);
return 0;
}
}
else
{
// MessageBox(NULL,"編輯框內容為空","",0);
CloseHandle(hFile);
return 0;
}
}
else
{
// MessageBox(NULL,"創建文件失敗","",0);
return 0;
}
CloseHandle(hFile);
return 1;
}
//編輯框到剪貼板(復制操作)
BOOL EditBoxToClip1(HWND hWnd)
{
LPTSTR lpCopyStr,lpText;
HANDLE hText; //全局內存句柄
DWORD dPos;
WORD wStart,wEnd;
char *lpBufPtr;
DWORD dwFileSize; //文本大小
//得到選中的文本位置
dPos=SendMessage(hWndEdit,EM_GETSEL,NULL,NULL);
wEnd=HIWORD(dPos); //開始位置
wStart=LOWORD(dPos); //結束位置
//獲得文本框中文本長度
dwFileSize=SendMessage(hWndEdit,WM_GETTEXTLENGTH,0,0L);
lpBufPtr=(char*)malloc(dwFileSize+2); //開辟文本緩沖區
if(lpBufPtr!=NULL)
{
// 讀取編輯框文本內容保存到 lpBufPtr(讀取的是所有文本,而不僅僅是選中的文本)
SendMessage(hWndEdit,WM_GETTEXT,dwFileSize,(LPARAM)lpBufPtr);
// 截取我們選中的文本
lpCopyStr=lpBufPtr+wStart;
*(lpCopyStr+(wEnd-wStart))='\0';
}
else
{
MessageBox(hWnd,"內存分配失敗","",MB_OK|MB_ICONEXCLAMATION);
return 0;
}
if(!(hText=GlobalAlloc(GHND,wEnd-wStart+1)))
{
MessageBox(hWnd,"全局內存分配失敗","",MB_OK);
return 0;
}
//復制文本到全局內存
lpText=(LPTSTR)GlobalLock(hText); //鎖定全局內存并返回全局內存指針
lstrcpy(lpText,lpCopyStr); //復制文本到全局內存
GlobalUnlock(hText); //解鎖全局內存
//以下為剪貼板操作
if(!OpenClipboard(hWnd)) //打開剪貼板
{
MessageBox(hWnd,"剪貼板打開失敗!","",MB_OK);
return 0;
}
EmptyClipboard(); //清空剪貼板
SetClipboardData(CF_TEXT,hText); //設置剪貼板內容
CloseClipboard(); //關閉剪貼板
hText=NULL;
return 1;
}
//編輯框到剪貼板(剪切操作)
BOOL EditBoxToClip2(HWND hWnd)
{
EditBoxToClip1(hWnd);
SendMessage(hWndEdit,EM_REPLACESEL,1,(LPARAM)""); //以空格取代編輯框被選中的文本
return 1;
}
//剪貼板到編輯框
BOOL ClipToEditBox(HWND hWnd)
{
LPTSTR lpPasteStr,lpText;
HANDLE hText;
DWORD dPos;
WORD wStart,wEnd;
//得到文本位置
dPos=SendMessage(hWndEdit,EM_GETSEL,NULL,NULL);
wEnd=HIWORD(dPos);
wStart=LOWORD(dPos);
if((wEnd-wStart)>=0) //文本長度必須>=0
{
if(!(IsClipboardFormatAvailable(CF_TEXT)))
{
/*--------- API函數小帖士 -------------
名稱 IsClipboardFormatAvailable
原型 BOOL IsClipboardFormatAvailable (UINT uFormat)
描述 檢測剪貼板是否支持某種數據類型
返回值:成功返回TRUE,失敗返回FALSE
現支持類型: CF_TEXT,即目前只支持檢測文本模式
------------------------------*/
MessageBox(hWnd,"剪貼板文本模式不可用","",MB_OK);
return 0;
}
if(!OpenClipboard(hWnd))
{
MessageBox(hWnd,"剪貼板打開失敗","",MB_OK);
return 0;
}
if(!(hText=GetClipboardData(CF_TEXT)))
{
MessageBox(hWnd,"無法讀取剪貼板數據","",MB_OK);
return 0;
}
lpText=(LPTSTR)GlobalLock(hText); //鎖定內存并返回內存指針
lpPasteStr=(LPTSTR)malloc(GlobalSize(hText)); //根據剪貼板內容開辟文本緩沖區
lstrcpy(lpPasteStr,lpText); //文本復制
GlobalUnlock(hText); //解鎖全局內存
//在編輯框中的光標位置插入 lpPasteStr
SendMessage(hWndEdit,EM_REPLACESEL,1,(LPARAM)lpPasteStr);
}
else
MessageBox(hWnd,"文本插入位置錯誤","",MB_OK);
return 1;
}
bool check(char* a, char* b) //判斷兩個字符串是否相等
{
int i;
int j=strlen(b);
for(i=0; i<j; i++)
{
if(*a==*b)
{
a++;
b++;
}
else
return 0;
}
return 1;
}
BOOL ShowFileInfo( HWND hwnd,HDC hDC,HDROP hDropInfo )
{
WORD cFiles;
char lpszFile[255];
/*---------- API 函數小帖士 ----------------
API函數 DragQueryFile():
UINT DragQueryFile(HDROP hDrop,
UINT iFile,
LPTSTR lpszFile,
UINT cch )
---- 其中hDrop是指向拖動文件結構的句柄;
---- iFile 是以0開始的被托動文件的序號,因為一次可能拖動多個文件。當此參數
---- 設為0xFFFFFFFF,則函數返回拖動文件的數量;
---- lpszFile 是指向文件名的緩沖區;
---- cch 是文件名緩沖區的大小,即文件名的字符數。
----------------------------------*/
// 返回拖入的文件數目
cFiles = DragQueryFile( hDropInfo,( UINT )0xFFFFFFFF,( LPTSTR )NULL,( UINT )NULL );
if( cFiles > 1 ) //如果施入的文件不只一個,顯示如下信息:
{
// MessageBox(NULL,"你拖入的文件過多,請重新操作","提示",0);
return FALSE;
}
else //如果拖入的文件只有一個
{
DragQueryFile( hDropInfo,0,lpszFile,sizeof( lpszFile ) );
//從 hDropInfo 獲取文件信息存放到 lpszFile
//注:DragQueryFile()函數取得的信息是完整的文件名,
// 即除了文件名外還包含了文件路徑,可以用 MessageBox()函數測試
EnableWindow(hWndEdit,1); //使編輯框可以接受輸入
FileToEditBox(hwnd,lpszFile); //文件到編輯框 !!!!!!!!!!!!
}
return TRUE;
}
//對話框的消息處理函數
BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return 1;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hdlg,0);
return 1;
case IDCANCEL:
EndDialog(hdlg,0);
return 1;
}
break;
case WM_CLOSE:
EndDialog(hdlg,0);
return 1;
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -