欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > windows開發記事本程序紀實(二)邏輯篇1

windows開發記事本程序紀實(二)邏輯篇1

熱門標簽:去哪里辦卡 無錫電銷機器人銷售 招聘信息 鄭州中國移動400電話申請 地圖標注植物名稱 揭陽外呼系統公司 南召400電話辦理資費 福建ai電銷機器人加盟公司 熱血傳奇沃瑪森林地圖標注 地圖標注審核工作怎么樣注冊

1. 主要內容

從本節開始介紹windows開發實現記事本程序的邏輯實現部分。本節的主要內容有以下3點:

1. 主窗口定義 —— 主要介紹記事本主界面窗口對應的窗口類及實現方案

2. RichEdit控件的選用及初始化 —— 記事本程序中編輯控件的選擇及使用

3. 整個程序ICON的選擇。—— 程序ICON設置

2. 實際開發

2.1 主窗口實現

在上一篇介紹界面的實現中只是給出了運行界面的效果,但是當時那個界面程序不能響應任何的windows消息,因為當時的窗口在創建時將窗口對應的過程處理函數設置為NULL。現在,我們需要將相應的過程處理函數添加上使得這個記事本應用程序可以響應我們發出的一系類操作指令。為此,本文在開發時,單獨設計了一個用于保存主界面窗口的類CMainWnd。這個類定義了整個窗口的過程處理函數Main_Porc。在Main_Proc中可以對傳入的任何消息進行處理(包括初始化窗口消息,窗口中其他控件的消息,關閉窗口消息等等)。以windows 自帶記事本為例,如圖1所示

圖1 windows主窗口消息效應區域

如上圖所示,在windows記事本主界面中,需要響應紅色矩形區域內的菜單控件的各類消息、響應黃色矩形區域內系統按鈕的相關消息,以及相應編輯控件Edit中的消息。對于主窗口中的各類控件的消息,windows會以WM_COMMAND消息進行傳輸,這也是整個程序的核心處理區域。系統按鈕關閉的消息則是WM_CLOSE。窗口初始化消息WM_INITDIALOG則是構建對話框窗口前發出的初始化消息。為了能夠響應上述各類消息,需要在CMainWnd中添加對于這幾類消息的響應函數,因此整個CMainWnd的基本實現形式如下:

頭文件聲明:

/************************************************************************/
/* file  : CMainWnd.h 
 * author : Huagang Li
 * date  : 2014-8-30 15:29:42
 * blogs : http://www.cnblogs.com/lhglihuagang/
 * tips  : 主窗口實現類, 實現窗口的過程函數,消息響應函數等
 */
/************************************************************************/
#ifndef _MAIN_WND_H
#define _MAIN_WND_H

#include Windows.h>
//////////////////////////////////////////////////////////////////////////
// CMainWnd 主窗口類,提供

class CMainWnd
{
public:
  static BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  static BOOL Main_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam);
  static void Main_OnCommand(HWND hWnd, int id, HWND hWndCtl, LPARAM lParam);
  static void Main_OnClose(HWND hWnd);

private:
  static HWND hMainWnd;  // 主窗口句柄
};


#endif

CMainWnd具體定義:


#include "MainWnd.h"
include WindowsX.h>
//////////////////////////////////////////////////////////////////////////
// static data members
HWND CMainWnd::hMainWnd = NULL;
//////////////////////////////////////////////////////////////////////////
// static function members
// 主窗口的過程函數,根據消息類型處理各類消息
BOOL WINAPI CMainWnd::Main_Proc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
 switch (uMsg)
 {
 HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
 HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
 HANDLE_MSG(hWnd, WM_CLOSE, Main_OnClose);
 }
/span>span style="color: #0000ff">return/span>span style="color: #000000"> FALSE;
}
BOOL CMainWnd::Main_OnInitDialog( HWND hWnd, HWND hWndFocus, LPARAM lParam )
{
 return TRUE;
}
// id為具體空間的ID號,可以在resource中定義有意義的控件ID,如“打開文件”可以設置
// 為ID_FILE_OPEN
void CMainWnd::Main_OnCommand( HWND hWnd, int id, HWND hWndCtl, LPARAM lParam )
{
 switch (id)
 {
 //
 }
}
void CMainWnd::Main_OnClose( HWND hWnd )
{
 ::EndDialog(hWnd, NULL);
}

在定義了CMainWnd后,在main函數處的DialogBox處添加主窗口的過程處理函數


::DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, CMainWnd::Main_Proc);

完成上述步驟運行后,就可以看到啟動后的主界面可以響應窗口上系統按鈕“關閉”,但是對于菜單控件的消息,因為消息響應此還是函數中數什么都沒有做,因此還是不會進行任何處理。

2.2 RichEdit控件的選用

      對于一個記事本程序來說,主界面上核心區域還是編輯區域。但是當前記事本程序中還沒有選擇任何編輯控件。通過觀察現有windows控件列表可以看出,適合編輯控件的有Edit Control以及Rich Edit2.0 Control。對于這兩種編輯控件,Edit Control較為簡單,但是響應的功能也較少。Rich Edit2.0 Control實現起來較為復雜,但是對應的功能也多了不少(例如可以改變字體顏色,字號等等)。本文希望能夠實現一個功能較強的記事本,因此選擇了Rich Edit2.0 Control進行后續開發。插入了Rich Edit2.0 Control后,主界面窗口對應的資源視圖如圖2所示:


圖2 IDD_MAIN中插入Rich Edit2.0 Control

      上述步驟運行后,本以為可以看到帶有編輯界面的記事本程序,可是實際上程序運行后沒有任何效果,甚至主界面都不能正常啟動了。百度后發現,對于richedit啟動失敗的方法都是針對MFC程序來說的,需要添加初始化函數AfxInitRichEdit2。但是現在使用windows API 開發,并沒有AfxInitRichEdit2這個函數,只能另尋他路了。終于在一篇博文中http://blog.csdn.net/dijkstar/article/details/7953816提到,原來上面那個初始化函數中主要是加載RichEdit依賴的dll,那么整個問題就豁然開朗了,我們只需要在主窗口啟動前手動的載入這個dll就可以了。因此在主函數的DialogBox前添加了依據載入dll的操作如下:

::LoadLibrary(T("riched20.dll"));

MAIN的properties中:

此時再運行程序時,可以正常啟動記事本了,且能夠在richedit中進行編輯,效果如圖3所示:


圖3 手動加載Riched20.dll后出現主界面窗口

      在啟動主界面后,可以正常進行編輯。貌似這個控件可以正常工作了。但在實際測試時,發現了以下幾個問題:

1. 界面運行后RichEdit邊框棱角過于分明

    處理方法: Richedit控件的properties  -> Boarder –> Flase

2.輸入Enter 不能換行(手動輸入時一直在同一行編輯)

   處理方法: Richedit控件的properties  -> Multiline–> True

                      Richedit控件的properties  -> Want Return–> True

3. 沒有滾動條(橫向以及縱向的)

    這個在主界面屬性上,IDD

   處理方法: IDD_MAIN-> properties  -> Horizontal Scrollbar–> True

                      IDD_MAIN –> properties  -> Vertical Scrollbar–> True

4. 不能隨窗口大小伸縮

    在對窗口進行伸縮時,RichEdit控件的大小還是保持原來的大小,如圖4所示:


圖4 主界面大小變化時RichEdit控件大小不變

    這個問題其實很好理解,因為伸縮主界面窗口時,windows將發送WM_SIZE消息通知窗口。這個過程類似于windows對主界面窗口說“hi, 你的大小已經變了,你根據改變后的大小變一下”。現在我們的主窗口過程處理函數中并沒有針對WM_SIZE消息對RichEdit進行特殊處理,因此主界面下面的RichEdit一直保持自己原來的大小,才會出現上面的情況。那么具體的解決方案為:在InitDialog中添加RichEdit大小自適應功能,同時針對WM_SIZE消息,添加Main_OnSize函數來處理這種獨立的控件。具體的代碼實現如下:

void CMainWnd::Main_OnSize( HWND hWnd, UINT state, int cx, int cy )
{
 RECT stRect;
 ::GetClientRect(hWnd, stRect); // 獲取窗口客戶區大小
/span>span style="color: #008000">///span>span style="color: #008000"> 將RichEdit大小調整為客戶區大小/span>
 ::MoveWindow(::GetDlgItem(hWnd, IDC_RICHEDIT), stRect.left, stRect.top,
 stRect.right-stRect.left, stRect.bottom-stRect.top, TRUE);
}

這里只是在CMainWnd中添加了對于WM_SIZE的消息響應函數,要讓RichEdit響應這個消息,還需要在Main_Proc中添加相應過程

HANDLE_MSG(hWnd, WM_SIZE, Main_OnSize);

這樣,RichEdit也就可以跟著主窗口大小自由伸縮了。上述過程處理函數中,主要調用了三個基本的API接口。

1. GetClientRect,這個API用于獲取客戶區大小,RichEdit伸縮的大小就是這個大小值

2. GetDlgItem 獲取窗口下某一個控件的句柄,例如GetDlgItem(hWnd, IDC_RICHEDIT),就可以獲得主窗口下RichEdit控件對應的句柄。

3. MoveWindow。它的第一個參數就是需要進行位置大小變化的窗口句柄。我們這里將2中的RichEdit句柄傳入,后面的參數分別是矩形區域的left點,top點,width值以及height值。最后一個參數用來表示大小改變后要不要重繪窗口。注意,這里選擇了TRUE。如果選擇FALSE,會出現以下這種情況:當將窗口變小后,在進行變大操作,RichEdit并沒有立即適應變大后的區域,還是保留在原來變小的區域。效果如圖5所示:

圖5 MoveWindows中參數repaint設置為FALSE后潛在問題

基于此,我們在用MoveWindow改變窗口大小時,最好使得repaint為TRUE,保證實時改變。

2.3 主程序ICON設計

      在上述截圖中可以看出,主界面的左上角ICON一直是windows自帶的ICON。為了與windows自帶記事本做到類似,直接到網上找了一個類似的JPG圖標轉為ICO,然后設置了程序的ICON。具體的圖標設置方法請參考http://www.cnblogs.com/lhglihuagang/p/3927283.html

      在圖標設置后,可以運行程序查看下最新的效果,如圖6所示


圖6 設置程序圖標后的結果

      最后,對話框窗口的標題Dialog實在顯得有些另類,這里根據windows自帶記事本的標題“無標題 - 記事本”,將這個值進行了相應的修改,具體為IDD_MAIN-> properties  -> Caption –> 無標題 - 記事本最后,對話框.

3. 運行結果

在添加了CMainWnd以及RichEdit后,整個程序的運行后效果如下圖7所示:


圖7 本節程序改動后的效果

4. 結論

    1. 使用RichEdit控件時,需要手動加載riched20.dll,否則程序運行后沒有任何界面效果

      2. RichEdit換行、滾動條、邊框都可以通過properties中相應字段進行設置

      3. 需要在CMainWnd中添加WM_SIZE消息響應函數,保證RichEdit自由伸縮。

5. 參考鏈接

      [1] http://blog.csdn.net/dijkstar/article/details/7953816

    [2] http://www.cnblogs.com/lhglihuagang/p/3927283.html

    [3] http://msdn.microsoft.com/en-us/library/ms633534(VS.85).aspx

6. 說明

     這將是一個系列博文,后面會繼續補充邏輯功能的開發的步驟。希望能與更多博友交流。 如果你覺得這篇文章還可以,請點贊,哈哈~~
      聲明:未作說明,則本文為年糕原創。      注意:轉載須保留全文,如需修改請 聯系作者。

您可能感興趣的文章:
  • windows開發記事本程序紀實(一)界面篇

標簽:黔南 鹽城 景德鎮 東莞 文山 南昌 桂林 宣城

巨人網絡通訊聲明:本文標題《windows開發記事本程序紀實(二)邏輯篇1》,本文關鍵詞  windows,開發,記事本,程序,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《windows開發記事本程序紀實(二)邏輯篇1》相關的同類信息!
  • 本頁收集關于windows開發記事本程序紀實(二)邏輯篇1的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    一区二区三区免费在线观看视频| 欧美性猛交xxxxxx富婆| 日韩免费观看高清完整版在线观看| 一区在线观看视频| 国产麻豆视频精品| 国产精品20p| 欧美大肚乱孕交hd孕妇| 日韩av网站在线观看| 欧美做受高潮中文字幕| 欧美网站大全在线观看| 亚洲乱码精品一二三四区日韩在线| 成人美女视频在线观看| 日韩成人毛片视频| 中文字幕在线免费不卡| 成人精品免费网站| 一本色道a无线码一区v| 亚洲女厕所小便bbb| 99re这里只有精品视频首页| 91久久精品国产91性色tv| 亚洲人午夜精品天堂一二香蕉| 不卡的av电影在线观看| 一本到不卡免费一区二区| 亚洲人成精品久久久久| 91小视频在线观看| 精品视频在线视频| 亚洲444eee在线观看| 国产精品无码在线| 精品欧美黑人一区二区三区| 久久成人羞羞网站| 午夜国产福利视频| 中文字幕视频一区| 99久久综合网| 日韩一区二区在线观看视频播放| 蜜桃视频免费观看一区| 91成人精品一区二区| 中文字幕制服丝袜一区二区三区| 91丨九色丨尤物| 欧美精品九九99久久| 男人的天堂久久精品| 五月激情四射婷婷| 亚洲欧洲在线观看av| 69久久精品无码一区二区 | 色呦呦一区二区| 日韩女优制服丝袜电影| 国产一区在线视频| 色偷偷一区二区三区| 亚洲一区二区三区四区在线免费观看| 国产麻豆剧传媒精品国产av| 精品盗摄一区二区三区| 国产亚洲成年网址在线观看| 欧美三级乱人伦电影| 午夜视频久久久久久| 亚洲午夜福利在线观看| 中文字幕不卡三区| 韩国三级hd中文字幕有哪些| 欧美本精品男人aⅴ天堂| 国产精品996| 欧美日韩一二三| 伦理电影国产精品| 成人免费毛片东京热| 日日摸夜夜添夜夜添亚洲女人| 免费黄色在线网址| 亚洲另类在线制服丝袜| av在线网站观看| 最好看的中文字幕久久| 久久久久久久无码| 中文字幕中文乱码欧美一区二区| 亚洲精品第二页| 欧美国产精品一区二区三区| 国产老头和老头xxxx×| 久久久美女毛片| 韩国一区二区三区四区| 久久综合久久综合久久综合| 91日韩一区二区三区| 精品成人私密视频| 中文字幕无码毛片免费看| 久久久久综合网| 中文字幕99页| 中文字幕免费在线观看视频一区| 日本精品一二三区| 亚洲国产成人私人影院tom| 大尺度做爰床戏呻吟舒畅| 国产精品色噜噜| 毛茸茸多毛bbb毛多视频| 自拍偷自拍亚洲精品播放| 亚洲精品午夜视频| 亚洲综合一区二区| 蜜臀av午夜精品久久| 偷窥少妇高潮呻吟av久久免费| 国产一区二区精彩视频| 蜜桃精品视频在线| 欧美日韩国产三级| 成人免费毛片a| 久久久久久97三级| 精品一区二区视频在线观看| 亚洲日本丝袜连裤袜办公室| 一二三四在线观看视频| 午夜精品一区二区三区三上悠亚| 唐朝av高清盛宴| 国产精品中文字幕一区二区三区| 欧美一级午夜免费电影| 91免费国产在线观看| 国产精品视频在线看| 亚洲视频一区在线| 中文字幕 自拍| 五月天久久比比资源色| 色88888久久久久久影院按摩| 国产中文字幕一区| 日韩无一区二区| 免费观看一区二区三区| 自拍偷拍国产亚洲| 国产精品99久久久久久成人| 激情文学综合丁香| 欧美精品一区二区蜜臀亚洲| 小毛片在线观看| 亚洲午夜久久久久久久久电影网| 色诱视频网站一区| 成人妖精视频yjsp地址| 国产目拍亚洲精品99久久精品| 久久成人激情视频| 男男gaygay亚洲| 日韩亚洲欧美成人一区| 中文字幕在线视频播放| 亚洲小少妇裸体bbw| 欧洲亚洲国产日韩| 91麻豆国产精品久久| 亚洲视频一二区| 国产88在线观看入口| 成人理论电影网| 中文字幕日韩av资源站| 国产高潮流白浆| 成人网男人的天堂| 国产精品电影院| 欧美三级日本三级| 不卡的av网站| 亚洲精品国产高清久久伦理二区| 欧美黑人性猛交xxx| 波多野结衣视频一区| 成人欧美一区二区三区小说| 国产免费无码一区二区视频| 白白色 亚洲乱淫| 亚洲乱码国产乱码精品精98午夜 | 日本成人在线网站| 日韩精品一区二区三区中文精品| 亚洲AV无码国产精品| 久久99国产精品久久99果冻传媒| 2023国产精华国产精品| 亚洲色图日韩精品| 成人黄色小视频在线观看| 亚洲人成精品久久久久| 欧美人与z0zoxxxx视频| 人妻丰满熟妇av无码久久洗澡| 理论电影国产精品| 亚洲精品在线网站| 少妇被躁爽到高潮无码文| 99久久99久久免费精品蜜臀| 伊人色综合久久天天人手人婷| 欧美午夜一区二区| 精品一区二区视频在线观看| 狠狠色丁香婷婷综合久久片| 国产精品网站在线| 欧美三级中文字幕在线观看| 欧美做受喷浆在线观看| 国产精品1区2区3区| 综合色天天鬼久久鬼色| 欧美日韩国产中文| 这里只有久久精品| 成熟亚洲日本毛茸茸凸凹| 一区二区三区在线视频观看 | 精人妻一区二区三区| 免费在线观看视频一区| 不许穿内裤随时挨c调教h苏绵| 日本aⅴ精品一区二区三区| 久久久久久**毛片大全| 在线观看成人毛片| 国产 中文 字幕 日韩 在线| 国产乱码字幕精品高清av| 亚洲黄色片在线观看| 日韩精品一区二区在线观看| 神马久久精品综合| 激情av中文字幕| 国产综合色视频| 亚洲你懂的在线视频| 日韩精品一区二区在线| 农村妇女精品一区二区| 无码人妻精品一区二区三| 国产专区综合网| 一片黄亚洲嫩模| 久久色.com| 欧美日韩国产经典色站一区二区三区| 国产综合精品在线| 亚洲av无码久久精品色欲| 激情综合网最新| 亚洲综合清纯丝袜自拍| 2023国产精品| 欧美日韩国产美| 成人精品一二三区| 日韩无码精品一区二区| 国产91色综合久久免费分享| 午夜精品福利一区二区蜜股av|