用VC 編寫 網路計時計費工具

2021-04-26 08:45:13 字數 2989 閱讀 3434

我們每次在windows

中撥號上網之後撥號程式都會最小化到系統托盤區裡面。當我們把滑鼠移到它的圖示上時,就會顯示出接收和傳送的資料流量,但我們最關心的往往是我們已經上網有多長時間了以及上網費用。下面筆者將向你介紹如何用vc++編寫乙個有這些功能的軟體,希望能對你有所幫助。

我們的程式介面,當按下確定時,它會最小化到系統托盤區。將滑鼠移到它的圖示上,如果你已經連到了網上,就會顯示連網的時間和費用 如果你沒有連網,那麼就顯示「未連線」。圖中的三個編輯框分別顯示連線時間,上網方式有撥號上網、局域上網等和即時費用。按下設定鍵,會彈出乙個對話方塊,要求你輸入每小時的費率。

下面我們來一步一步實現這個程式的各項功能。

在資源編輯區內編輯對話方塊,最終結果如圖1。設定三個靜態文字的id分別為idc_static_showtime,idc_static_method和idc_static_fee,三個編輯框的id分別為idc_edit_showtime,idc_edit_method和idc_edit_fee「確定」按鈕的id是idok,「設定」按鈕是idc_button_setup。新增乙個新的對話方塊idd_dialog1,編輯框的id號是idc_edit_yuan.

以上**中關鍵的函式是shell_notifyicon,第乙個引數表示你要增加、修改還是刪除圖示;第二個引數是乙個notifyicondata結構變數對應的位址,它的主要作用是提供必要的資訊,使托盤區圖示能夠正常工作。需要注意的一點是一定要把原先預設的cbuttononok語句從函式裡刪除否則程式會在每次按下回車之後就自動退出。

下面**是雙擊圖示時的響應函式

別忘了在nettimerdlg.h裡定義函式:

afx_msg void onncwparam wparam ,lparam lparam

同時在nettimerdlg.cpp的begin_message_mapcnettimerdlg,cdialog和begin_message_mapcnettimerdlg,cdialog之間插入on_messagewm_nc,onnc,用來申明對該訊息的響應函式為onnc。

下面在cnettimerdlg的oninitdialog函式後部return true語句前加入

settimer1 1000 null //設定乙個時鐘 編號是1 每過1秒鐘響應一次。

用classwizard為wm_timer加乙個響應函式 **如下

void cnettimerdlgontimeruint nidevent

 m_bconnected = internetgetconnectedstateflags null //判斷是否連網的api

ifm_bconnected //如果連網

onconnected//處理連網情況下的函式

else//如果沒有連網

ondisconnected//處理未連網情況下的函式

cdialogontimernidevent

以上**中的internetgetconnectedstate是乙個api函式,用來判斷當前是否處於連網狀態。它的第乙個引數是乙個指向dword型別的指標,用於接收上網方式的資訊。第二個引數由系統保留,指定為null。

由於我們用到了有關網路的函式 所以在檔案頭部得新增一句

#include ″afxinet.h″

接下去分別定義onconnected和ondisconnected函式:

void cnettimerdlgonconnected

 int hour = 0//定義小時 分 秒

int minute = 0

int second = 0

if m_itime < 60 //如果總的時間小於60秒...

 hour = 0

minute = 0

second = m_itime

if m_itime >= 60 && m_itime < 3600//如果大於等於60小於3600

 hour = 0

minute = m_itime / 60

second = m_itime - minute  60

if m_itime >= 3600 //如果大於等於3600

 hour = m_itime / 3600

minute = m_itime - hour  3600 / 60

second = m_itime - 60  minute - 3600  hour

m_itime ++//累加

m_strtime.format″%d小時 %d分 %d秒″ hour minute second //格式化資料

setdlgitemtextidc_edit_showtime m_strtime//顯示連網時間

switchflags //判斷以什麼方式上網

 case internet_connection_modem//撥號上網

setdlgitemtextidc_edit_method ″撥號上網″

break

case internet_connection_lan//通過區域網上網

setdlgitemtextidc_edit_method ″通過區域網上網″

break

case internet_connection_proxy //通過**伺服器

setdlgitemtextidc_edit_method ″通過**伺服器

最後 別忘了做一些必要的編譯設定 因為我們用到了wininet.lib庫 所以要在「工程/設定」選單下的link選項卡裡將「物件/庫模組」一項設為wininet.lib。

個漂亮的圖示替代vc預設的那個圖示 編譯工程檔案 乙個屬於你自己的網路計時工具就產生了以後在上網時使用這個工具 只要輸入isp的每小時收費值,在任何時候,只要用滑鼠點出系統托盤區的程式主視窗,就能對自己的上網時間和費用一目了然了。

注:文字程式在windows

98 visual c++6.0下通過。

用SysTick做的延時計時器

這個實驗是使用systick中斷方式做延時定時器。主要目的是熟悉下systick的使用。首先,定義個延時函式,目的是計數 void delay io uint32 t ntime void timingdelay decrement void 其中timingdelay decrement是供sys...

用VC 6 0編寫撥號程式

用vc 6.0編寫撥號程式 mthon 17 八月,2007 10 05 用vc 6.0編寫撥號程式 撥號上網是編寫網路應用軟體常用的操作,程式在執行某些遠端網上操作前,需要先撥號與網路連線,完成操作後由必須收線斷開。在windows 95 98的 撥號網路 中,雖然提供撥號功能,但無法直接讓自己開...

用js編寫的考試系統倒計時

今天學習了龐大的 js,我們學習了 window document 等等裡面有許多有用的東西,下面是乙個用 js編寫的考試系統倒計時 開始 onclick starttime form action input type text name name size 80 id daytime form ...