ホームページ > 記事 > WeChat アプレット > CnClock デスクトップ時計 - Winform アプレット開発
旧正月に家に帰ったらインターネットにアクセスできなかったので、この 2 日間退屈していたので、自分で小さなプログラムを調べました。まずプログラムのインターフェイスを見てみましょう:
インターフェイス 1:
インターフェイス 2:
この小さなプログラムの作成には約 1 日以上かかり、その機能は比較的単純です. このプログラムの機能は次のとおりです:
1. 日付、現在時刻、週、旧暦を表示できます。
2. プログラムをデスクトップに吸着させて、デスクトップに埋め込まれたような効果を得ることができます。
3. 起動時にプログラムが自動的に起動するように設定できます。
メインコードの一部を以下に掲載します:
//设置吸附桌面功能 private void 吸附桌面ToolStripMenuItem_CheckStateChanged(object sender, EventArgs e) ...{ //默认为勾选状态(吸附桌面),点击后即触发该事件,“吸附桌面”项勾掉了,则变量ischecked为!ischecked(false), //则可以移动窗体。再次点击该菜单项,ischecked为!ischecked(true),则不能移动窗体。 //checkstate发生变化 ischecked = !ischecked; if (ischecked == true) ...{ 勾选但不移动的处理#region 勾选但不移动的处理(如果用户勾选了该项,但是并没有移动程序的位置,则进行该项判断) //2012年1月31日0:27:44 解决思路: //先判断ini文件是否存在,如果是第一次启动程序或ini文件丢失,则无ini文件, //则没有上次保存的ini配置信息,不进行读取操作,否则 //先从ini文件中读取上次设定的x,y的坐标值,作为old_x,old_y。再将新的坐标值与旧的 //坐标值进行比较,如果窗体移动了,则比较后不同,进行写入ini操作,否则不写入 if (File.Exists(pathbase + "CnClock.ini")) ...{ try ...{ StreamReader sr = new StreamReader(pathbase + "CnClock.ini", Encoding.GetEncoding("gb2312")); if (sr.Peek() >= 0) ...{ old_x = Convert.ToInt32(sr.ReadLine()); old_y = Convert.ToInt32(sr.ReadLine()); } sr.Close(); } catch (Exception ex) ...{ MessageBox.Show(ex.Message.ToString()); } } #endregion //2012年1月30日22:34:43,又想到一个新问题:如果用户勾选了“吸附桌面”项后,没有移动该窗体的位置, //这种情况下是否要判断一下新位置与原位置是否相同??? 经考虑,需设定! //2012年1月31日0:21:04 设置完成,代码见 #勾选但不移动的处理 部分 //什么时候才会执行下面这句代码“yidong = false;” 呢? //分析:在form_load时不会执行,只有当用户移动窗体后,再选中"吸附桌面"项后才会执行 //这句代码,所以这里才是控制什么时候将新的位置坐标写入ini文件的地方,在这句下面写相应代码 yidong = false; //如果用户勾掉了“吸附桌面”选项,则窗体可以移动,待用户确定新位置后, //如果用户不勾上“吸附桌面”菜单项,则不记录新位置坐标,否则将新位置的坐标写入ini配置文件中。 try ...{ //获取窗体移动后的坐标(_x,_y) _x = this.Location.X; _y = this.Location.Y; //勾选但不移动的处理(部分代码) xin_x = this.Location.X; xin_y = this.Location.Y; //相或,一真为真。即如果x不同或y不同或两个都不同,则说明窗体位置发生变化了 //须执行写入操作 //勾选但不移动的处理(部分代码) if (!(xin_x == old_x) || !(xin_y == old_y)) ...{ StreamWriter sw = new StreamWriter(pathbase + "CnClock.ini", false, Encoding.GetEncoding("gb2312")); sw.Flush(); sw.WriteLine(_x); sw.WriteLine(_y); sw.Close(); //新位置确认后给予提示 this.notifyIcon1.ShowBalloonTip(5, "CnClock提示", "新位置已设定!", ToolTipIcon.Info); } } catch (Exception ex) ...{ MessageBox.Show(ex.Message.ToString()); } } else ...{ yidong = true; } } 设置开机自启动功能: //设置开机启动功能 private void 开机启动ToolStripMenuItem_CheckStateChanged(object sender, EventArgs e) ...{ /*设计思路: 2012年1月31日16:00:47完成 * 默认开机启动,则在form_load中先执行一下设置autorun方法。 * 用户勾掉“开机启动”项后,则取消autorun,用户勾选“开机启动”项后,则设置autorun。 */ //初始为开机启动,则isautorun初始为true,当用户点击该项后,isautorun为false,不开机启动。 isautorun = !isautorun; if (isautorun == true) ...{ //isautorun为true,开机启动 auToRun.SetAutoRun(Application.ExecutablePath, true); //设置为开机启动后给予提示 this.notifyIcon1.ShowBalloonTip(5, "CnClock提示", "开机启动已设定!", ToolTipIcon.Info); } else ...{ //isautorun为false,开机不启动 auToRun.SetAutoRun(Application.ExecutablePath, false); //设置为开机不启动后给予提示 this.notifyIcon1.ShowBalloonTip(5, "CnClock提示", "已关闭开机启动!", ToolTipIcon.Info); } } 程序下载地址:CnClock1.0版:http://dl.dbank.com/c0qbry08qv CnClock2.0版:http://dl.dbank.com/c0m78h7dty 如果以上页面无法下载可到下面页面下载:http://www.kuaipan.cn/index.php?ac=file&oid=5028779638390791 说明:两个版本的区别是1.0版是方形显示的,2.0版是条形显示的(见文首图片)。 该程序需要.net Framework2.0或以上版本支持。
これまでに発見された小さな問題:
プログラムがスタートアップをサポートするかどうかを選択するとき、レジストリを操作する必要があります。ユーザーのコンピュータに 360 Security Guard や QQ Computer Manager などの管理ソフトウェアが搭載されている場合は、プロンプト メッセージがポップアップ表示されます。ユーザーがレジストリに対する操作を許可しないことを選択した場合、プログラムは例外プロンプトをポップアップ表示し、レジストリ情報は書き込まれませんが、正しいバブル プロンプト情報がポップアップ表示されます。この場所はまだ修正する必要があります。
CnClock デスクトップ時計 - Winform アプレット開発関連記事をさらに詳しく知りたい場合は、PHP 中国語 Web サイトに注目してください。