我要做一個類似地鐵上面站點資訊的界面,然后下面做一個Combo控制元件,里面添加站點名稱,在里面選擇站點,然后通過一個Button按鈕確定選擇的站點,實作界面上相應的功能,如當前選擇的站點為紅色,前一個站點和后一個站點為黑色,前一個站點以前的都為灰色。
#pragma once求大神指點啊,新人,很懵逼,謝謝謝謝
#include <UIlib.h>
#include <string.h>
using namespace DuiLib;
#ifdef _DEBUG
# ifdef _UNICODE
# pragma comment(lib, "DuiLib_ud.lib")
# else
# pragma comment(lib, "DuiLib_d.lib")
# endif
#else
# ifdef _UNICODE
# pragma comment(lib, "DuiLib_u.lib")
# else
# pragma comment(lib, "DuiLib.lib")
# endif
#endif
struct station{
char StationName[13];
COptionUI* pOption;
CButtonUI* pLabel;
};
class CDuiFrameWnd : public WindowImplBase
{
public:
virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); }
virtual CDuiString GetSkinFile() { return _T("Qtitle.xml"); }
virtual CDuiString GetSkinFolder() { return _T(""); }
void Init()
{
struct station cStation,cStation1,cStation2,cStation3,cStation4,cStation5,cStation6;
strcpy(cStation.StationName,"佛主嶺");
strcpy(cStation1.StationName,"高新五路");
strcpy(cStation2.StationName,"高新四路");
strcpy(cStation3.StationName,"流芳園橫街");
strcpy(cStation4.StationName,"工程大學");
strcpy(cStation5.StationName,"光谷大道");
strcpy(cStation6.StationName,"當代國際花園");
p_surebtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("StationChoice")));
//這里獲取到的指標可能是空的,可以斷點看看
CComboUI* pAccountCombo = static_cast<CComboUI*>(m_pm.FindControl(_T("StationMess")));
CEditUI* pAccountEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("accountedit")));
//指標判斷,如果指標為空,直接操作會崩潰?所以都需要判斷下,程式健壯性
if(pAccountCombo && pAccountEdit)pAccountEdit->SetText(pAccountCombo->GetText());
pAccountEdit->SetFocus();
}
void OnPrepare(){
CComboUI* pStationCombo = static_cast<CComboUI*>(m_pm.FindControl(_T("StationMess")));
}
//duilib視窗的初始化函式
virtual void InitWindow()
{
// SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0); //視窗的最大化
}
virtual void Notify(TNotifyUI& msg)
{
if(msg.sType == _T("click"))
{
if(msg.pSender->GetName() == _T("p_surebtn"))
{
COptionUI* pControl = static_cast<COptionUI*>(m_pm.FindControl(_T("StationChoice")));
}
}
else if(msg.sType == _T("itemselect"))
{
if(msg.pSender->GetName() == _T("StationMess"))
{
//代碼有問題,m_pm未初始化???
CComboUI* pAccountCombo = static_cast<CComboUI*>(m_pm.FindControl(_T("StationMess")));
pAccountCombo->GetText();
}
}
}
//OnCreate這里有問題,還沒有改,應該不需要用回呼
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
styleValue &= ~WS_CAPTION;
::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
m_pm.Init(m_hWnd);
m_pm.AddPreMessageFilter(this);
CDialogBuilder builder;
CDialogBuilderCallbackEx cb;
CControlUI* pRoot = builder.Create(_T("Qtitle.xml"), (UINT)0, &cb, &m_pm);
ASSERT(pRoot && "Failed to parse XML");
m_pm.AttachDialog(pRoot);
m_pm.AddNotifier(this);
Init();
return 0;
}
public:
CPaintManagerUI m_pm;
private:
CButtonUI* p_surebtn;
};
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
CPaintManagerUI::SetInstance(hInstance);
CDuiFrameWnd duiFrame;
duiFrame.Create(NULL, _T("DUIWnd"), WS_VISIBLE | WS_POPUP, WS_EX_WINDOWEDGE);
duiFrame.CenterWindow();
duiFrame.ShowModal();
return 0;
}
uj5u.com熱心網友回復:
不用宣告m_pm吧,有個m_paintmaneger什么的能直接用uj5u.com熱心網友回復:
宣告的m_pm就相當于m_paintmanager啊,而且你說的這個也是需要宣告的啊轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/67043.html
標籤:HTML/XML
下一篇:libevent大并發下的問題
