初試MFC 基於Dialog程式設計

2021-06-16 08:02:24 字數 2557 閱讀 6129

《一》關於全域性變數的設定。

1》在stdfx.h裡面定義乙個全域性變數即可,其他地方使用,就可以用extern宣告。

在cwinthread裡面有個成員變數mainfram,所以在這裡定義乙個公共成員變數也是可以的。

《二》關於執行緒

主要有兩種執行緒,乙個是所謂的uithread,乙個是work thread.

首先說uithread吧,它是乙個runtimeclass繼承cwinthread,然後設定mainframe,

再用cwinthread* afxbeginthread( cruntimeclass*pthreadclass, intnpriority= thread_priority_normal, uintnstacksize= 0, dworddwcreateflags= 0, lpsecurity_attributeslpsecurityattrs= null );

既可以啟動,乙個很好的例子就是計時器,這裡就不貼**了。

然後是work thread

首先設定執行緒函式 uint threadfun(lpvoid ),有兩種選擇,定義成全域性函式,或者類成員函式,記得要定義成static才能去掉this指標。

然後使用

cwinthread* afxbeginthread( cruntimeclass*pthreadclass, intnpriority= thread_priority_normal, uintnstacksize= 0, dworddwcreateflags= 0, lpsecurity_attributeslpsecurityattrs= null );啟動

關於同步問題,以及互斥,臨界資源,等問題,稍加學習,使用訊號量,互斥鎖以及監視器,就可以實現。

再者就是關於執行緒的狀態切換的問題,這裡不再贅述。

《三》自定義視窗訊息

首先定義訊息碼,如#define wm_my_msg wm_user+1

然後定義訊息處理函式afx onmymsg()然後在message map新增處理項on_message(wm_sock_msg,onsockmsg)

使用postmessage(hwnd,lpstr,wparam,lpram)有一些的函式。自己選擇吧,

《四》關於網路程式設計問題。這裡跟基於控制台的程式的乙個很大區別就是不能阻塞,否則ui介面處於假死狀態。no response

有兩種方式:

1》使用執行緒。

2》使用mfc封裝的csocket,casy。。。(非同步套接字,名字有點長,記不住了。)繼承這兩個其中的乙個,然後定製自己想要偵聽的訊息,如fd_read或者fd_write等等,然後改寫處理函式即可。

我在這裡使用的是多執行緒 的方式。

首先是用執行緒接收網路資訊,然後自定義乙個視窗訊息,將資訊傳遞給小視窗訊息處理函式,處理函式解析訊息,然後做出相印的反應,並且更新ui。

<五>關於新增心的標頭檔案,而出現預編譯通不過的問題即:fatal error c1010: unexpected end of file while looking for precompiled header directive.處理方式很簡單,在這裡新增stdfx。h就ok了。

還有一種方法:對於vc6::如果發生錯誤的檔案是由其他的c**檔案新增進入當前工程而引起的,則alt+f7進入當前工程的 settings,選擇c/c++選項卡,從category組合框中選中precompiled headers,選擇not using precompiled headers。確定。

原因也很簡單:

對預編譯標頭檔案說明如下:  

所謂標頭檔案預編譯,就是把乙個工程(project)中使用的一些mfc標準標頭檔案(如windows.h、afxwin.h)預先編譯,以後該工程編譯時,不再編譯這部分標頭檔案,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。  

預編譯標頭檔案通過編譯stdafx.cpp生成,以工程名命名,由於預編譯的標頭檔案的字尾是「pch」,所以編譯結果檔案是projectname.pch。  

編譯器通過乙個標頭檔案stdafx.h來使用預編譯標頭檔案。stdafx.h這個頭檔名是可以在project的編譯設定裡指定的。編譯器認為,所有在指令#include   "stdafx.h"前的**都是預編譯的,它跳過#include   "stdafx.   h"指令,使用projectname.pch編譯這條指令之後的所有**。  

因此,所有的cpp實現檔案第一條語句都是:#include   "stdafx.h"。 

《六》關於clistbox的問題,就是使用addstring的時候預設的是安首字元字母順序插入  

藥箱插入末尾可以使用:insterstring(-1,cstring);當然也可以附加自己的順序處理函式。

時間原因就嫌寫這麼多把。

程式猿是練出來的。加油!(maxf也要加油!)

構架設計重要

鏈式程式設計初試

鏈式程式設計思想 將多行操作通過 連線成一句 使 可讀性好,比如 a 1 b 2 c 3 代表性的就是masonry 鏈式程式設計特點 方法的返回值是block,block必有返回值 自身物件 block引數 操作物件 先簡單介紹下目前咱們已知的程式設計思想。1 面向過程 處理事情以過程為核心,一步...

MFC國際化與多語言 01 基於Dialog

人生的意義不在於留下什麼,只要你經歷過,就是最大的美好,這不是無能,而是一種超然。泰戈爾 系統 win10 x64 vs版本 vs2010 旗艦版 1 基於dialog的mfc程式,initinstance 例程中新增下列 switch m nlanguagesel setthreaduilangu...

基於MFC的執行緒函式程式設計

int cnt 0 計數器 int terminal flag 0 stop標誌 cwinthread m pthread 執行緒名 static uint jisuan lpvoid pparam 執行緒函式新增的執行緒函式如下,利用this指標指向計數器cnt,顯示到edit control中,...