duilib界面开发问题

神农藏百草 2018-06-29 09:03:52
我要做一个类似地铁上面站点信息的界面,然后下面做一个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;
}
求大神指点啊,新人,很懵逼,谢谢谢谢
...全文
329 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
神农藏百草 2018-07-02
  • 打赏
  • 举报
回复
引用 1 楼 zhao3132453 的回复:
不用声明m_pm吧,有个m_paintmaneger什么的能直接用
声明的m_pm就相当于m_paintmanager啊,而且你说的这个也是需要声明的啊
半雨微凉丶 2018-07-01
  • 打赏
  • 举报
回复
不用声明m_pm吧,有个m_paintmaneger什么的能直接用

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧