小作品心得—–7月18日

來源:互聯網
上載者:User
 

截至此時,接近5天,從一開始的介面1.0到介面2.0,介面風格從深沉到清新期間,遇到一些問題。

應用平台:FW,LIBUIDK,VC6.0,偶爾VS2005測試其實問題。

1:一開始做個主介面並不困難,很快1個小時就搞定。此時仍未編碼。不過存在一些BUG:

1)介面放大的時候,控制項零散分布。

2)功能表列設定不完全。

2:停止設計介面,開始嘗試鉤子調用,系統功能需要。

    (這個過程有點模糊,有空補回)

3:開始設計子視窗,屬於該系統的監控部分。開始編碼。

    思考如何下手過程:

    1)首先想到有點類似於瀏覽器功能,但是搜遍了google所有關鍵詞都未出現有關LIBUIDK和VC6相結合   

       的相關函數。於是找了技術客服,要了例子,給了QQ皮膚的例子,照著做。

    2)向子視窗方向發展,一開始只用了ShowWindow(SM_SHOW),結果初始化時出現DEBUG錯誤提示。       經過了和客服一番口水後,發現,視窗建立的一般流程是Register(),Create(),ShowWindow(),While().

於是乎在主介面的Create()裡面Create()多個子視窗。以為大功告成。出現如下問題,視窗只顯示一些控制項內容,未顯示全部。於是再和客服一番口水,這時候google已經難以發揮作用,因為那個死鬼軟體到現在毫無任何可靠文檔可參考。最後,又發現,原來那個控制項也運算元視窗,問題原因是控制項重疊了,客服建議我不要用Create(),直接用他封裝的那個LoadFrame()介面。使用之後發現,問題仍無法解決,於是朝UI軟體考慮

    3)開始思考問題根源,UI皮膚軟體。根據客服所說的控制項重疊,那就是說父視窗有控制項和子視窗的控制項重疊,觀察一遍之後發現按鈕之類的都沒有衝突,再仔細一看發現有個IDC_STA_POS的靜態文字框罩住整個子視窗位置,於是乎,將其刪除,最後編譯運行看結果,子視窗的某個地方的標題列不見了,根據剛才的思路,往標題列那裡增加多個靜態文字框,最後結果完美無缺。(之所以,當時會價格靜態文字框,是因為看了QQ皮膚軟體才跟著做,這是教訓啊。)

4:某個時刻隊友說介面很肉酸,好,換!

5:開始設計監控子視窗裡的清單控制項。

    思考過程如下:

    1)先在UI裡面划出一個LIST框,然後直接在按鈕函數裡面加m_WatList.InsertColumn();最後出現3.2的DeBUG錯誤,跟著前面的經驗,直接Create()一個控制項出來,跟著LIBUIDK裡面的List執行個體,也是CREATE(),有了列表效果,就給了隊友,手工。最後,那邊反應,捲軸無效,那時候,俺已經見周公去了。第二天起來發現問題,也就是今天。

   2)查看滾動無效,首先思考,是否建立的時候設定不好,google加MSDN差了CListCtrl所有函數後,把有關捲軸的函數嘗試完後,還是發現問題仍然存在。(PS:在搜尋過程發現,原來有很多關於捲軸的變化,可以介面停留在添加處,另外也有,滑鼠只對捲軸有反應,不過當時沒有太注意那些,以後碰到再去查,反正比LIBUIDK好多了,起碼google有答案。)去外面散了一下步後,忽然發現,根據以往經驗,會不會是子視窗問題,因為滑鼠點擊內容也是無效的。

   3)問題指向,子視窗無法接受滑鼠響應。又G了一下,忘記過程是怎樣了,反正沒結果。再和客服水了一下,他也在尋找問題,一開始他說是IDC_STA_POS覆蓋了控制項使其沒有反應。(PS:他說道,IDC_STA_POS是定位作用,記下。)但是刪除之後,問題仍然存在。因為,如果是覆蓋問題,沒有理由按鈕有效而清單控制項無效。於是乎,再次和他水了一下,果然是他開發的,開始指向問題所在,重複建立了清單控制項。

   4)問題指向,列表重複建立,把代碼裡面的所有Create全部刪除,再重新調試了一下,發現,出現了3.2的DEBUG錯誤提示。再和客服水了一下,他道,這個你可以自己調試看看。對啊,這個問題要靠自己。謝拉

   5) 問題指向,InsertColumn()處,斷點,再F10,再F11,不斷F11,再最深處,看到一個地方,如下:

_AFXCMN_INLINE int CListCtrl::InsertItem(int nItem, LPCTSTR lpszItem)

{ ASSERT(::IsWindow(m_hWnd)); return InsertItem(LVIF_TEXT, nItem, lpszItem, 0, 0, 0, 0); }

停在這裡後直接去到DEBUG提示那個函數。說明這裡出了問題。仔細看了每個參數和函數,查了每個參數的意思,後,目標停在IsWindow(m_hWnd)這裡,視窗控制代碼失效,再次G了一下,發現解決方案是

如果你得TabCtrl是用資源檔定義的則

char chTmp[64] = { 0 };

if( NULL == ( CTabCtrl.m_hWnd = ::GetDlgItem(m_hWnd,IDC_TABCTRL)) )

{

sprintf(chTmp,"%d",GetLastError()); 

::MessageBox(NULL,chTmp,"Tip",MB_OK ¦MB_ICONSTOP);

goto ERROREND;//如果你會用SHE則修改為__leave;

}

 

首先取得控制代碼

當然沒有照抄,CWatList.m_hWnd=::GetDlgItem(m_hWnd,IDC_LIST_Wat);

再調試了一下,基本問題解決。再修改一下介面問題。

到此,完成大概初步。

=====================================================================

剩餘介面問題:

1,功能表列未弄好。

2,主介面其他按鈕的子視窗未弄好。

3,主介面放大後,介面分離。

4,縮小後放大,顯示無緩衝效果。

5,無返回主介面按鈕。

=====================================================================

亟待補充的很多基礎知識:

1,編碼風格。

2,軟體介面製作規則。

3,演算法,最近做了這個系統,ACM做題有點跟不上,還有英語。

4,底層技術,例如線程,進程式控制制。

代碼大全要認真讀。C++Primer,C primer.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.