.Net Micro Framework研究—實現SideShow窗體界面

基于MF系統的Windows SideShow界面是非常炫的(如下圖)。既然微軟能用.Net Micro Framework實現這么棒的界面效果,我想我們也能做到。

(SideShow模擬器界面和游戲程序中的右鍵菜單—注意菜單彈出后,其它的界面變暗了)
現在的任務是設計一套支持鼠標(或觸摸屏)的窗體框架(目前MF提供的Window類僅支持按鍵功能),所以正好把SideShow如此炫的界面元素也可以添加進來。
用過MF的人知道是用下面的方法來實現按鍵事件接收的,既然我們要支持鼠標功能,所以最好也用類似的機理實現。
???

 
  1. //按鍵事件 ?
  2. ????protected?override?void?OnButtonDown(ButtonEventArgs?e) ?
  3. ????{ ?
  4. ????????switch?(e.Button) ?
  5. ????????{ ?
  6. ????????????//按下確定鍵 ?
  7. ????????????case?Button.Select: ?
  8. ????????????????break; ?
  9. ????????????//按下左鍵 ?
  10. ????????????case?Button.Left: ?
  11. ????????????????break; ?
  12. ????????????//按下右鍵 ?
  13. ????????????case?Button.Right: ?
  14. ????????????????break; ?
  15. ????????????//按向上 ?
  16. ????????????case?Button.Up: ?
  17. ????????????????break; ?
  18. ????????????//按向下 ?
  19. ????????????case?Button.Down: ?
  20. ????????????????break; ?
  21. ????????????//按下菜單 ?
  22. ????????????case?Button.Menu: ?
  23. ????????????????break; ?
  24. ????????????//按下返回鍵 ?
  25. ????????????case?Button.Back: ?
  26. ????????????????break; ?
  27. ????????} ?
  28. ????????base.OnButtonDown(e); ?
  29. ????} ?

用反編譯工具仔細研究了MF底層庫代碼(.Net FrameWork 太龐大了,一個人絕對短時間內看不完,其實也很難看下去,但是對剛剛起步的MF來說,.Net Micro FrameWork就簡單多了),終于理清了頭緒。主要原理是在鼠標信息處理線程中通過Application.Current.Windows 屬性(該屬性存放了當前實例所有派生于Window類的窗體)和應用實例的this.Dispatcher屬性的BeginInvoke方法,外部調用窗體鼠標事件函數。充分利用基類虛函數的妙處來實現類似按鍵信息處理的功能。
在YFWindowBase類中聲明如下虛擬鼠標事件函數。
?

 
  1. //鼠標移動 ?
  2. ????public?virtual?void?OnMouseMove(object?sender,?MouseEventArgs?e) ?
  3. ????{ ?
  4. ????????if?(MouseMove?!=?null)?MouseMove(sender,?e); ?
  5. ????} ?
  6. ????//鼠標單擊 ?
  7. ????public?virtual?void?OnMouseClick(object?sender,?MouseEventArgs?e) ?
  8. ????{ ?
  9. ????????if?(MouseClick?!=?null)?MouseClick(sender,?e); ?
  10. ????} ?
  11. ????//按下 ?
  12. ????public?virtual?void?OnMouseDown(object?sender,?MouseEventArgs?e) ?
  13. ????{ ?
  14. ???????if?(MouseDown?!=?null)?MouseDown(sender,?e); ?
  15. ????} ?
  16. ????//抬起 ?
  17. ????public?virtual?void?OnMouseUp(object?sender,?MouseEventArgs?e) ?
  18. ????{ ?
  19. ????????if?(MouseUp?!=?null)?MouseUp(sender,?e); ?
  20. ????} ?
  21. ? ?

在鼠標信息處理函數中執行如下的代碼即可。
???

 
  1. //處理鼠標消息 ?
  2. ????private?static?void?TransactMouse(MouseState?state,?int?x,?int?y,?MouseButtons?button) ?
  3. ????{ ?
  4. ????????if?(Application.Current?==?null)?return; ?
  5. ????????for?(int?i?=?Application.Current.Windows.Count?-?1;?i?>=?0;?i--) ?
  6. ????????{ ?
  7. ????????????try?
  8. ????????????{ ?
  9. ????????????????YFWindowBase?mw?=?Application.Current.Windows[i]?as?YFWindowBase; ?
  10. ? ?
  11. ????????????????if?(mw.Enabled?&&?mw.IsVisible) ?
  12. ????????????????{ ?
  13. ????????????????????//判斷子窗體 ?
  14. ????????????????????bool?bReturn?=?false; ?
  15. ????????????????????for?(int?j?=?mw.Children.Count?-?1;?j?>=?0;?j--) ?
  16. ????????????????????{ ?
  17. ????????????????????????//僅最上層并且可視的控件接收鼠標消息 ?
  18. ????????????????????????YFControl?cl?=?mw.Children[j]; ?
  19. ????????????????????????if?(!bReturn?&&?cl.Visible?&&?IsRectContains(x,?y,?mw.Left?+?cl.Left,?mw.Top?+?cl.Top,?cl.Width,?cl.Height)) ?
  20. ????????????????????????{ ?
  21. ????????????????????????????if?(cl.Enable)?//Enable和Visible不一樣,Enable即使無效,下層控件也沒有機會獲得鼠標消息 ?
  22. ????????????????????????????{ ?
  23. ????????????????????????????????if?(!cl._EnterFlag) ?
  24. ????????????????????????????????{ ?
  25. ????????????????????????????????????cl._EnterFlag?=?true; ?
  26. ????????????????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(cl.OnMouseEnter),?cl,?new?MouseEventArgs(button,?x?-?cl.Left?-?mw.Left,?y?-?cl.Top?-?mw.Top)); ?
  27. ????????????????????????????????} ?
  28. ????????????????????????????????if?((state?&?MouseState.Move)?>?0) ?
  29. ????????????????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(cl.OnMouseMove),?cl,?new?MouseEventArgs(button,?x?-?cl.Left?-?mw.Left,?y?-?cl.Top?-?mw.Top)); ?
  30. ????????????????????????????????if?((state?&?MouseState.Down)?>?0) ?
  31. ????????????????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(cl.OnMouseDown),?cl,?new?MouseEventArgs(button,?x?-?cl.Left?-?mw.Left,?y?-?cl.Top?-?mw.Top)); ?
  32. ????????????????????????????????if?((state?&?MouseState.Up)?>?0) ?
  33. ????????????????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(cl.OnMouseUp),?cl,?new?MouseEventArgs(button,?x?-?cl.Left?-?mw.Left,?y?-?cl.Top?-?mw.Top)); ?
  34. ????????????????????????????????if?((state?&?MouseState.Click)?>?0) ?
  35. ????????????????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(cl.OnMouseClick),?cl,?new?MouseEventArgs(button,?x?-?cl.Left?-?mw.Left,?y?-?cl.Top?-?mw.Top)); ?
  36. ????????????????????????????} ?
  37. ????????????????????????????//向主窗體傳OnMouseEvent消息,為了繪制鼠標 ?
  38. ????????????????????????????if?((state?&?MouseState.Event)?>?0) ?
  39. ????????????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(mw.OnMouseEvent),?mw,?new?MouseEventArgs(button,?x?-?mw.Left,?y?-?mw.Top)); ?
  40. ????????????????????????????bReturn?=?true; ?
  41. ????????????????????????} ?
  42. ????????????????????????else?
  43. ????????????????????????{ ?
  44. ????????????????????????????if?(cl._EnterFlag) ?
  45. ????????????????????????????{ ?
  46. ????????????????????????????????cl._EnterFlag?=?false; ?
  47. ????????????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(cl.OnMouseLeave),?cl,?new?MouseEventArgs(button,?x?-?cl.Left,?y?-?cl.Top)); ?
  48. ????????????????????????????} ?
  49. ????????????????????????} ?
  50. ????????????????????} ?
  51. ????????????????????if?(bReturn)?return; ?
  52. ????????????????} ?
  53. ? ?
  54. ????????????????//僅最上層并且可視的窗體接收鼠標消息 ?
  55. ????????????????if?(mw.IsVisible?&&?IsRectContains(x,?y,?mw.Left,?mw.Top,?mw.Width,?mw.Height)) ?
  56. ????????????????{ ?
  57. ????????????????????if?(!mw.Enabled)?return; ?
  58. ? ?
  59. ????????????????????if?((state?&?MouseState.Move)?>?0) ?
  60. ????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(mw.OnMouseMove),?mw,?new?MouseEventArgs(button,?x?-?mw.Left,?y?-?mw.Top)); ?
  61. ????????????????????if?((state?&?MouseState.Down)?>?0) ?
  62. ????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(mw.OnMouseDown),?mw,?new?MouseEventArgs(button,?x?-?mw.Left,?y?-?mw.Top)); ?
  63. ????????????????????if?((state?&?MouseState.Up)?>?0) ?
  64. ????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(mw.OnMouseUp),?mw,?new?MouseEventArgs(button,?x?-?mw.Left,?y?-?mw.Top)); ?
  65. ????????????????????if?((state?&?MouseState.Click)?>?0) ?
  66. ????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(mw.OnMouseClick),?mw,?new?MouseEventArgs(button,?x?-?mw.Left,?y?-?mw.Top)); ?
  67. ????????????????????if?((state?&?MouseState.Event)?>?0) ?
  68. ????????????????????????_dispatcher.BeginInvoke(new?MouseInputEventHandler(mw.OnMouseEvent),?mw,?new?MouseEventArgs(button,?x?-?mw.Left,?y?-?mw.Top)); ?
  69. ????????????????????return; ?
  70. ????????????????} ?
  71. ????????????} ?
  72. ????????????catch?(Exception?e) ?
  73. ????????????{ ?
  74. ????????????????throw?new?Exception(e.Message.ToString(),?e); ?
  75. ????????????} ?
  76. ????????} ?
  77. ????} ?

? 用戶程序的窗體類只要派生于YFWindowBase類,就可以直接支持鼠標和按鍵功能了。用戶代碼如下:
???

 
  1. //主窗體 ?
  2. ???internal?sealed?class?MFWindow?:YFWindowBase ?
  3. ???{ ?
  4. ???????public?YFLabel?label1; ?
  5. ???????YFButton?button1,?button2,?button3,?button4,?button5; ?
  6. ???????public?MFWindow() ?
  7. ???????{ ?
  8. ???????????//標簽 ?
  9. ???????????label1?=?new?YFLabel("就緒",?0,?Height?-?25,?Width,?25); ?
  10. ???????????label1.TextAlign?=?TextAlignment.Left; ?
  11. ???????????label1.BackColor?=?ColorUtility.ColorFromRGB(189,?235,?255); ?
  12. ???????????label1.BorderStyle?=?BorderStyle.FixedSingle; ?
  13. ???????????//添加按鈕 ?
  14. ???????????button1?=?new?YFButton("觸摸屏校準",?30,?35,?90,?40); ?
  15. ???????????button1.MouseClick?+=?new?MouseInputEventHandler(button_MouseClick); ?
  16. ???????????button2?=?new?YFButton("計算器",200,?35,?90,?40); ?
  17. ???????????button2.MouseClick?+=?new?MouseInputEventHandler(button_MouseClick); ?
  18. ???????????button3?=?new?YFButton("簡易記事本",?30,?135,?90,?40); ?
  19. ???????????button3.MouseClick?+=?new?MouseInputEventHandler(button_MouseClick); ?
  20. ???????????button4?=?new?YFButton("關于...",?200,?135,?90,?40); ?
  21. ???????????button4.MouseClick?+=?new?MouseInputEventHandler(button_MouseClick); ?
  22. ???????????button5?=?new?YFButton("主菜單",?125,?85,?70,?40); ?
  23. ???????????button5.MouseClick?+=?new?MouseInputEventHandler(button_MouseClick); ?
  24. ???????????Children.Add(button1); ?
  25. ???????????Children.Add(button2); ?
  26. ???????????Children.Add(button3); ?
  27. ???????????Children.Add(button4); ?
  28. ???????????Children.Add(button5); ?
  29. ???????????Children.Add(label1); ?
  30. ???????????button3.Enable?=?false; ?
  31. ???????????//button3.Visible?=?false; ?
  32. ???????????//設置菜單 ?
  33. ???????????Menu.AddItem(new?MenuItem("觸摸屏校準")); ?
  34. ???????????Menu.AddItem(new?MenuItem("-")); ?
  35. ???????????Menu.AddItem(new?MenuItem("計算器")); ?
  36. ???????????Menu.AddItem(new?MenuItem("簡易記事本")); ?
  37. ???????????Menu.AddItem(new?MenuItem("-")); ?
  38. ???????????Menu.AddItem(new?MenuItem("關于...")); ?
  39. ???????????Menu[3].Enabled?=?false; ?
  40. ???????????//Menu[3].Visible?=?false; ?
  41. ???????}???????? ?
  42. ???????//按鈕事件 ?
  43. ???????void?button_MouseClick(object?sender,?MouseEventArgs?e) ?
  44. ???????{ ?
  45. ???????????YFButton?button=((YFButton)sender); ?
  46. ???????????switch?(button.Text) ?
  47. ???????????{ ?
  48. ???????????????case?"主菜單": ?
  49. ???????????????????//彈出菜單 ?
  50. ???????????????????this.Menu.Show(); ?
  51. ???????????????????break; ?
  52. ???????????????default: ?
  53. ???????????????????OnMenuClick(new?MenuEventArgs(0,?button.Text)); ?
  54. ???????????????????break; ?
  55. ???????????}?????????????????????????? ?
  56. ???????} ?

運行后的界面如下:
?

圖1:主界面(按鈕即支持鼠標也可以用按鍵切換輸入焦點(right鍵等同于PC平臺上的Tab鍵),并用OK鍵觸發按鍵事件)

?

圖2:單擊主菜單按鈕或單擊“Menu”就可以彈出主菜單


?

圖3:不要小看了上圖的藍色小圓,是我費了好大勁才繪制出來的(目前MF僅支持矩形框的填充)。
?

 
  1. private?void?DrawCircle(Color?c,int?x,?int?y,?int?r,?DrawingContext?dc) ?
  2. ????{ ?
  3. ????????Pen?p=new?Pen(c); ?
  4. ????????SolidColorBrush?b?=?new?SolidColorBrush(c); ?
  5. ????????int?Offset45=(int)(0.707*r); ?
  6. ????????int?Offset30?=?r?/?2; ?
  7. ????????int?Offset60?=?(int)(0.866?*?r); ?
  8. ? ?
  9. ????????for?(int?i?=?Offset45;?i?<?r?+?1;?i++) ?
  10. ????????{ ?
  11. ????????????dc.DrawEllipse(null,?p,?x,?y,?i,?i); ?
  12. ????????} ?
  13. ????????dc.DrawRectangle(b,?null,?x?-?Offset45,?y?-?Offset45,Offset45*2,?Offset45*2); ?
  14. ????????dc.DrawRectangle(b,?null,?x?-?Offset60,?y?-?Offset30,?Offset60?*?2,?Offset30?*?2); ?
  15. ????????dc.DrawRectangle(b,?null,?x?-?Offset30,?y?-?Offset60,?Offset30?*?2,?Offset60?*?2); ?
  16. ? ?
  17. ????????dc.DrawLine(p,?x?-?Offset60,?y?-?Offset30,?x?-?Offset30,?y?-?Offset60); ?
  18. ????????dc.DrawLine(p,?x+?Offset60?,?y?+?Offset30,?x?+?Offset30?,y?+?Offset60?); ?
  19. ????????dc.DrawLine(p,?x?-?Offset60,?y?+?Offset30,?x?-?Offset30?,?y?+?Offset60); ?
  20. ????????dc.DrawLine(p,?x?+?Offset60,?y?-?Offset30,?x?+?Offset30,?y?-?Offset60); ?
  21. ???} ?
  22. ? ?
  23. ? ?

圖5:終于在MF上實現了計算器的功能,目前不僅支持鼠標,也可以用光標鍵和OK鍵進行輸入計算了。
別小看了計算器程序,由于MF僅有數字轉字符串功能,沒有實現字符串轉數字的功能,我自己自定義了一些函數,用了一些特殊的用法才編寫完成。
?

 
  1. //數字輸入的部分代碼 ?
  2. if?(strInput?==?"0.")?dblInput?=?0; ?
  3. ????????if?(strInput?!=?"0.") ?
  4. ????????{ ?
  5. ????????????strInput?+=?b.Text; ?
  6. ????????????if?(strInput.IndexOf('.')<1) ?
  7. ????????????{ ?
  8. ????????????????dblInput?*=?10; ?
  9. ????????????????dblInput?+=?ToDouble(b.Text); ?
  10. ????????????} ?
  11. ????????????else?
  12. ????????????{ ?
  13. ????????????????int?index?=?strInput.Length?-?strInput.LastIndexOf('.')?-?1; ?
  14. ????????????????dblInput?+=?ToDouble(b.Text)?/System.Math.Pow(10,index); ?
  15. ????????????} ?
  16. ????????} ?
  17. ????????else?if?(b.Text?!=?"0") ?
  18. ????????{ ?
  19. ????????????strInput?=?b.Text; ?
  20. ????????????dblInput?=?ToDouble(b.Text); ?
  21. ?????} ?

?? 下面是窗體的界面搭建部分,你絕對想不到用這么短的代碼就實現了上圖的界面布局(看過我以前.Net Micro Framework研究的網友,應該對MF本身提供的控件有印象,正是因為系統的控件不好用,我專門重新寫了一套MF控件類)。


???

 
  1. ?YFButton[]?button=new?YFButton[20]; ?
  2. ????YFLabel?lblInput?=?null; ?
  3. ????string[]?strText?=?new?string[]?{?"7",?"8",?"9",?"/",?"CE",?"4",?"5",?"6",?"*",?"%",?"1",?"2",?"3",?"-",?"1/x",?"0",?"+/-",?".",?"+",?"="?}; ?
  4. ????public?YFCalc(string?Title,int?Width,int?Height,YFWindowBase?Parent) ?
  5. ????????:?base(Title,?Width,?Height,?Parent) ?
  6. ????{ ?
  7. ????????int?x=ClientRect.X,y=ClientRect.Y; ?
  8. ? ?
  9. ????????lblInput?=?new?YFLabel("0.",?x?+?5,?y?+?5,?ClientRect.Width?-?10,?20); ?
  10. ????????lblInput.TextAlign?=?TextAlignment.Right; ?
  11. ????????Children.Add(lblInput);? ?
  12. ????????for?(int?i?=?0;?i?<?20;?i++) ?
  13. ????????{ ?
  14. ????????????if(i?%?5==0?&&?i!=0) ?
  15. ????????????{ ?
  16. ????????????????x?=?ClientRect.X; ?
  17. ????????????????y?=?y?+?32; ?
  18. ????????????} ?
  19. ????????????button[i]?=?new?YFButton("",?x?+?5,?y?+?32,?32,?28); ?
  20. ????????????button[i].Text?=?strText[i]; ?
  21. ????????????button[i].MouseClick?+=?new?MouseInputEventHandler(button_MouseClick);? ?
  22. ????????????x?+=?37; ?
  23. ????????????Children.Add(button[i]);? ?
  24. ????????}??????????????? ?
  25. ????} ?
  26. ????//按鈕單擊 ?
  27. ????void?button_MouseClick(object?sender,?MouseEventArgs?e) ?
  28. { ?
  29. } ?

其實這段時間以來,我一直在研究MF,雖然目前它還不是很成熟,但是隨著研究的深入,越來越對它癡迷,越來越發現很多MF的寶藏(如果你有耐心的話,一定要看看MF底層框架的源碼(通過反編譯工具Reflector),你會發現很多很有意思的功能)。
MF相對于Windows XP/Vista、Windows CE而言,還只能算一個嬰孩,但就是這樣,就如一個偉人所說:孩子就是未來的希望。所以有理由相信MF的明天會更好









本文轉自yefanqiu51CTO博客,原文鏈接:http://blog.51cto.com/yfsoft/322900,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392872.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392872.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 344. 反轉字符串

編寫一個函數&#xff0c;其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[] 的形式給出。 不要給另外的數組分配額外的空間&#xff0c;你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。 你可以假設數組中的所有字符都是 ASCII 碼表中的可打印字符。…

事件捕獲(capture)和冒泡事件(Bubble)

PS&#xff1a;這里是我從別人的博客中學習事件捕獲和冒泡是的總結&#xff0c;如果你也感興趣的話&#xff0c;建議你點擊鏈接查看原博客的內容&#xff0c;他們寫的都是很經典&#xff01; 對“捕獲”和“冒泡”這兩個概念&#xff0c;我想我們對冒泡更熟悉一些&…

gulp編譯css_如何用gulp縮小CSS

gulp編譯cssby Vinicius Gularte由Vinicius Gularte 如何用gulp縮小CSS (How to minify your CSS with gulp) In this article, Im going to show a simple way to automatically minify your CSS files using gulp. ?在本文中&#xff0c;我將展示一種使用gulp自動縮小CSS文…

線段樹(區間更改,區間查最值)模板

線段樹(區間更改,區間查最值)模板 主要重在理解線段樹,理解了怎么改都可以,還有以后不要直接抄模板,要寫出自己想的一份代碼 &代碼&#xff1a; #include <cstdio> #include <bitset> #include <iostream> #include <set> #include <cmath>…

Unity3D項目開發一點經驗

我們主要使用3dsmax2010進行制作&#xff0c;輸出FBX的類型導入Unity3D中。默認情況下&#xff0c;3dsmax8可以和U3D軟件直接融合&#xff0c;自動轉換為FBX物體。 注意事項如下&#xff1a; 1.面數控制 在MAX軟件中制作單一GameObject物體的面數不能超過65000個三角形&#xf…

leetcode 142. 環形鏈表 II(set/快慢指針)

給定一個鏈表&#xff0c;返回鏈表開始入環的第一個節點。 如果鏈表無環&#xff0c;則返回 null。 為了表示給定鏈表中的環&#xff0c;我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置&#xff08;索引從 0 開始&#xff09;。 如果 pos 是 -1&#xff0c;則在該鏈表中沒有…

html5 支持表格嗎,html5 – 在HTML 5中使用表格很好嗎?

簡單規則 – 使用表格表格數據&#xff0c;使用其他元素進行演示(使用CSS設計布局)&#xff0c;如div&#xff0c;section&#xff0c;aside&#xff0c;nav等。這為他們所持有的內容提供了意義&#xff0c;而不是為所有內容使用表事實是&#xff0c;開發人員在90年代使用了表格…

css網格_我如何記住CSS網格屬性

css網格The syntax for CSS Grid is foreign and hard to remember. But if you can’t remember CSS Grid’s syntax, you won’t be confident when you use CSS Grid.CSS Grid的語法是外來的&#xff0c;很難記住。 但是&#xff0c;如果您不記得CSS Grid的語法&#xff0c;…

2017年讀書計劃(一)

前言 這篇博文就暫時不記錄技術了&#xff0c;記錄下生活。對自己今年2017年做個讀書計劃安排。 最近在看一部網絡劇 - 《花間提壺方大廚》&#xff0c;也許你們會感覺我很無聊&#xff0c;我也是被頭條帶壞了&#xff0c;每天上班一個小時的地下交通-地鐵&#xff0c;就借助上…

.net10個必備工具

1.NUnit 編寫單元測試的工具2.NDoc 自動生成代碼文檔的工具3.NAnt 編譯解決方案的工具4.CodeSmith 自動生成代碼的工具5.FxCop 檢查你的代碼是否按照規范編寫的工具6.Snippet Compiler 編譯少量代碼的工具7.ASP.NET Version Switcher Visual Studio .NET Project Conve…

音標

音標 oror ds念子音&#xff0c;ts念s音

leetcode 530. 二叉搜索樹的最小絕對差(中序遍歷)

給你一棵所有節點為非負值的二叉搜索樹&#xff0c;請你計算樹中任意兩節點的差的絕對值的最小值。示例&#xff1a;輸入&#xff1a;1\3/2輸出&#xff1a; 1解釋&#xff1a; 最小絕對差為 1&#xff0c;其中 2 和 1 的差的絕對值為 1&#xff08;或者 2 和 3&#xff09;。代…

計算機排線知識,一種計算機排線梳理裝置制造方法及圖紙

【技術實現步驟摘要】一種計算機排線梳理裝置本技術涉及計算機排線梳理&#xff0c;具體涉及一種計算機排線梳理裝置。技術介紹計算機俗稱電腦&#xff0c;是現代一種用于高速計算的電子計算機器&#xff0c;可以進行數值計算&#xff0c;又可以進行邏輯計算&#xff0c;還具有…

github和pypi_如何將GitHub用作PyPi服務器

github和pypiI was looking for a hosted private PyPi Python Package server, that used credentials that the team already has (such as GitHub).我正在尋找一個托管的私有PyPi Python Package服務器&#xff0c;該服務器使用了團隊已經擁有的憑據(例如GitHub)。 I didn’…

數據結構與算法---查找算法(Search Algorithm)

查找算法介紹 在java中&#xff0c;我們常用的查找有四種: 順序(線性)查找 二分查找/折半查找 插值查找斐波那契查找1)線性查找算法 示例&#xff1a; 有一個數列&#xff1a; {1,8, 10, 89, 1000, 1234} &#xff0c;判斷數列中是否包含此名稱【順序查找】 要求: 如果找到了&a…

Exchange Server 2007郵箱存儲服務器的集群和高可用性技術(上)

高可用性矩陣-->見下圖:郵箱服務器高可用性目標: 數據可用性-->保護郵箱數據免于失敗和損壞服務可用性-->提高群集實效轉移操作 簡化群集管理 支持地理分散的群集 支持低成本大郵箱(GB)使用戶可以基于業務需要更好的選擇容錯方案提高解決方案的可用性使用解決方案可…

【C/C++開發】C++實現字符串替換的兩種方法

替換字符串replace() erase()//C 第一種替換字符串的方法用replace()|C 第二種替換字符串的方法用erase()和insert()【 Cstring|C replace()|C erase()|C insert()|C自定義替換字符串函數】#include<string> #include<iostream> using namespace std;//第一種替換字…

html設置按鈕樣式變為橢圓,css border-radius圓形變為橢圓形,位置:絕對

我正在圍繞字體真棒圖標創建一個圓圈。我的問題是&#xff0c;當我添加position: absolute圓成為一個橢圓。css border-radius圓形變為橢圓形&#xff0c;位置&#xff1a;絕對同樣的情況&#xff0c;如果我是設置display: block這里是什么&#xff0c;我想實現的圖像 -CONRADU…

《火球——UML大戰需求分析》(第1章 大話UML)——1.5 小結和練習

說明&#xff1a; 《火球——UML大戰需求分析》是我撰寫的一本關于需求分析及UML方面的書&#xff0c;我將會在CSDN上為大家分享前面幾章的內容&#xff0c;總字數在幾萬以上&#xff0c;圖片有數十張。歡迎你按文章的序號順序閱讀&#xff0c;謝謝&#xff01;本書已經在各大網…

金陵科技學院計算機開設課程,金陵科技學院各專業介紹

各專業介紹會計學專業(四年制本科) 金融學專業(四年制本科)財務管理專業(四年制本科) 國際經濟與貿易專業(四年制本科)市場營銷專業(四年制本科)國際商務專業(三年制專科)物流管理專業(三年制專科) 對外漢語專業(四年制本科)古典文獻(古籍修復)專業(四年制本科)行政管理(高級秘…