#include#include#include#pragmacomment(lib,"shlwapi.lib")#defineWM_FILEN" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【SDK編程】仿微軟記事本V2.0

系統(tǒng) 2095 0

更新:
更換了ico.....
新增選擇字體和顏色的功能;
修正:
資源文件都已經(jīng)打包到工程目錄里了,路徑也改成了相對(duì)路徑;
解決了保存100KB以上的文件會(huì)丟失數(shù)據(jù)的問題。


【SDK編程】仿微軟記事本V2.0 【SDK編程】仿微軟記事本V2.0

【SDK編程】仿微軟記事本V2.0

【SDK編程】仿微軟記事本V2.0

【SDK編程】仿微軟記事本V2.0

【SDK編程】仿微軟記事本V2.0

    核心代碼:
#include "resource.h"
#include <windows.h>
#include <stdio.h>
#include <Richedit.h>
#include <shlwapi.h>
#pragma comment(lib,"shlwapi.lib")
#define WM_FILENAME WM_USER+1//自定義消息,這個(gè)消息用來發(fā)送用戶選擇的文件全路徑
#define OPEN                WM_USER+2//一個(gè)Flag,標(biāo)識(shí)這個(gè)文件是在打開對(duì)話框里選擇的還是保存對(duì)話框
#define SAVE                 WM_USER+3

INT_PTR ExitCode1;//用來保存主對(duì)話框的退出代碼
INT_PTR ExitCode2;//About對(duì)話框的退出代碼
HINSTANCE hMain;//用來保存實(shí)例句柄
//主對(duì)話框過程函數(shù)聲明
INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
//About對(duì)話框過程函數(shù)聲明
INT_PTR CALLBACK AboutProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);

BOOL OnInitDialog(HWND hwndDlg);//相應(yīng)WM_ONINITDIALOG消息時(shí)調(diào)用的函數(shù)
BOOL OnOpen(HWND hwndDlg,DWORD Flag);//當(dāng)用戶點(diǎn)擊Open菜單項(xiàng)時(shí)調(diào)用
//void GetTitle(char *pSourceBuf,char *pDestBuf);
void ChooseFont(HWND hwndDlg,CHOOSEFONT &font,LOGFONT &log);

int WINAPI WinMain(HINSTANCE hIns,HINSTANCE hPrev,LPSTR lpCmd,int nShowCmd)//入口函數(shù)
{
    LoadLibrary("Riched20.dll");//要用Rich Edit控件就必須要先加載這個(gè)庫,否則程序無法運(yùn)行
    hMain=hIns;
    ExitCode1=DialogBox(hIns,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);//創(chuàng)建主對(duì)話框
    return 0;
}

//主對(duì)話框過程函數(shù)
INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_INITDIALOG://初始化
        OnInitDialog(hwndDlg);
        break;
    //當(dāng)用戶改變主對(duì)話框的大小時(shí),Edit控件大小也應(yīng)該改變。
    case WM_SIZE:
        {
            RECT rect;
            ZeroMemory(&rect,sizeof(RECT));
            GetWindowRect(hwndDlg,&rect);//獲取主對(duì)話框窗口的大小,詳見MSDN
            HWND hEdit=GetDlgItem(hwndDlg,IDC_TEXT);
            //改變Edit控件的大小
            SetWindowPos(hEdit,HWND_TOP,0,0,rect.right-rect.left-5,rect.bottom-rect.top-50,SWP_SHOWWINDOW);
            CloseHandle(hEdit);

        }
        break;
    case WM_COMMAND:
        if(IDM_OPEN==wParam)//Open被用戶點(diǎn)擊
            OnOpen(hwndDlg,OPEN);
        if(IDM_EXIT==wParam)//Exit被用戶點(diǎn)擊
            SendMessage(hwndDlg,WM_CLOSE,NULL,NULL);//發(fā)送WM_CLOSE消息
        if(IDM_ABOUT==wParam)//About被點(diǎn)擊,創(chuàng)建ABOUT對(duì)話框
            ExitCode2=DialogBox(hMain,MAKEINTRESOURCE(IDD_ABOUT),hwndDlg,AboutProc);
        if(IDM_SAVE==wParam)//用戶點(diǎn)擊Save
        {
          
            OnOpen(hwndDlg,SAVE);
        }
        if(IDM_CLOSEFILE==wParam)
        {
            SetDlgItemText(hwndDlg,IDC_TEXT,"");
            SetWindowText(hwndDlg,"NotePadV2.0  By 小司");
        }
        if(IDM_FORMAT==LOWORD(wParam))
        {
            LOGFONT log;
            CHOOSEFONT font;
            CHARFORMAT2 cm;
            ZeroMemory(&cm,sizeof(cm));

            ChooseFont(hwndDlg,font,log);
            if(ChooseFont(&font))
            {

                strcpy(cm.szFaceName,log.lfFaceName);
                cm.cbSize=sizeof(cm);
                cm.dwMask=CFM_FACE | CFM_SIZE | CFM_WEIGHT | CFM_COLOR;
                cm.yHeight=log.lfHeight * log.lfHeight;
                cm.wWeight=log.lfWeight;
                cm.bPitchAndFamily=log.lfPitchAndFamily;
                cm.crTextColor=font.rgbColors;

                HWND hText=GetDlgItem(hwndDlg,IDC_TEXT);
                SendMessage(hText,EM_SETCHARFORMAT,SCF_ALL,(LPARAM)&cm);
            }
           
        }
        break;
    case WM_FILENAME://自定義的消息,用來接收文件路徑
        if(OPEN==lParam)
        {
            //打開文件的目的是為了用GetFileSize函數(shù)獲取文件大小
            HANDLE hFile=CreateFile((LPCSTR)wParam,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,
                                FILE_ATTRIBUTE_NORMAL,NULL);
            if(INVALID_HANDLE_VALUE==hFile)
            {
                MessageBox(hwndDlg,"Open File Failed!","Error",0);
                CloseHandle(hFile);
                break;
            }
            DWORD dwFileSize=GetFileSize(hFile,NULL);//獲取文件大小
            CloseHandle(hFile);

            TCHAR *pszData=new TCHAR[dwFileSize];
            memset(pszData,0,dwFileSize);
           
            FILE *fp=fopen((char*)wParam,"r");//wParam里保存了文件的路徑
            fread(pszData,dwFileSize,1,fp);
            fclose(fp);
            SetDlgItemText(hwndDlg,IDC_TEXT,pszData);//顯示數(shù)據(jù)
        }

        if(SAVE==lParam)
        {
            HWND hText=GetDlgItem(hwndDlg,IDC_TEXT);
            int len=GetWindowTextLength(hText);

            TCHAR *pBuf=new TCHAR[len];
            memset(pBuf,0,len);
            GetDlgItemText(hwndDlg,IDC_TEXT,pBuf,len);

            char szFilePath[MAX_PATH+10];
            sprintf_s(szFilePath,"%s.txt",(char*)wParam);//湊出來.txt

            FILE *fp=fopen(szFilePath,"w");
            fwrite(pBuf,1,len,fp);
            fclose(fp);
        }
        break;
        //這個(gè)消息無用,調(diào)試用的..
    case WM_LBUTTONDOWN:

        break;
    case WM_CLOSE:
        if(IDYES==MessageBox(hwndDlg,"Are you sure to exit?","Warming",MB_YESNO | MB_ICONWARNING))
        {
            EndDialog(hwndDlg,ExitCode1);
            break;
        }
        break;
    default:
        break;
    }
    return FALSE;
}

//about窗口過程函數(shù)
INT_PTR CALLBACK AboutProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_CLOSE:
        EndDialog(hwndDlg,ExitCode2);
        break;
    case WM_COMMAND:
        if(IDOK==wParam)
        {
            SendMessage(hwndDlg,WM_CLOSE,NULL,NULL);
        }
        break;
    default:
        break;
    }
    return FALSE;
}
BOOL OnInitDialog(HWND hwndDlg)
{
    HICON hIcon=LoadIcon(hMain,MAKEINTRESOURCE(IDI_ICON1));//載入圖標(biāo)
    SendMessage(hwndDlg,WM_SETICON,ICON_SMALL,(LPARAM)hIcon);//設(shè)置圖標(biāo)
    return TRUE;
}
BOOL OnOpen(HWND hwndDlg,DWORD Flag)
{
    //見MSDN中關(guān)于GetOpenFileName的說明
    TCHAR szFile[MAX_PATH];
    TCHAR szFileTitle[MAX_PATH];
    OPENFILENAME op;
    memset(szFile,0,MAX_PATH);
    memset(szFileTitle,0,MAX_PATH);

    ZeroMemory(&op,sizeof(op));
    op.lStructSize=sizeof(op);
    op.hwndOwner=hwndDlg;
    op.lpstrFile=szFile;
    op.nMaxFile=MAX_PATH;
    op.lpstrFilter="All\0*.*\0文本文件(*.txt)\0*.txt\0";
    op.nFilterIndex=2;
    op.lpstrFileTitle=NULL;
    op.nMaxFileTitle=0;
    op.lpstrInitialDir=NULL;
    op.Flags=OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT;

    if(OPEN==Flag)
    {
        if(GetOpenFileName(&op))
        {//把文件的路徑發(fā)送給主對(duì)話框
            StrCpy(szFileTitle,szFile);
            PathStripPath(szFileTitle);
            SetWindowText(hwndDlg,szFileTitle);
            SendMessage(hwndDlg,WM_FILENAME,(WPARAM)szFile,(LPARAM)Flag);
        }
    }
    if(SAVE==Flag)
    {
        if(GetSaveFileName(&op))
        {
            SendMessage(hwndDlg,WM_FILENAME,(WPARAM)szFile,(LPARAM)Flag);
        }
    }
    return TRUE;
}

void ChooseFont(HWND hwndDlg,CHOOSEFONT &font,LOGFONT &log)
{
    TCHAR szStyle[256];
    HDC dc=GetDC(NULL);
    memset(szStyle,0,256);
    WORD wFontType=0;
    COLORREF color=RGB(0,0,0);
    ZeroMemory(&log,sizeof(log));

    ZeroMemory(&font,sizeof(font));
    font.lStructSize=sizeof(font);
    font.hwndOwner=hwndDlg;
    font.lpLogFont=&log;
    font.Flags=CF_EFFECTS | CF_FORCEFONTEXIST | CF_BOTH;
    font.rgbColors=color;
    font.lpszStyle=szStyle;
    font.hDC=dc;
    font.nFontType=wFontType;

}

  


【SDK編程】仿微軟記事本V2.0


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久精品2 | 狠狠狠很橹影院 | 国产专区在线 | 美国毛片一级视频在线aa | 精久久 | 国产在线91 | 亚洲精品一区二区久久这里 | 男人天堂欧美 | 国产精品久久久久久久久 | 国产欧美日韩在线播放 | 伊人久久影视 | 国产一区亚洲欧美成人 | 国产成人精品久久免费动漫 | www精品久久 | 久久er国产精品免费观看2 | 四虎新网址 | 手机看片在线精品观看 | 奇米影视在线播放 | 亚洲成人99| 国产福利视频一区美女 | 亚洲国产视频在线 | 久久伊人最新 | 欧美一级毛片aaa片 欧美一级毛片不卡免费观看 | 亚洲综合国产一区在线 | 国产一级毛片夜一级毛片 | 四虎影院永久网址 | 国产乱码一区二区三区 | 性欧美一级毛片在线播放 | 成人精品一区二区久久 | 很黄很色的免费视频 | 亚洲不卡免费视频 | 黄片毛片一级片 | 第一福利在线 | 久久精品国产精品亚洲毛片 | 国产精品9999久久久久 | 欧美a视频 | 国产成人精品日本亚洲语音2 | 在线成人a毛片免费播放 | 久久99精品国产麻豆宅宅 | 中文国产成人精品久久96 | 国产剧情一区二区三区 |