返回首页


伟大的网站geonames.org提供了一些Web服务。其中之一是所谓的时区,并会给你一个给定的地理纬度和经度的时区信息。有了一个GPS功能的Windows Mobile设备,你可以这样查询的WebService,并获得当前位置的时区信息。
不幸的WebService不提供的WSDL,所以你必须编写自己的包装类。我写了一个小的类,它HttpWebRequest和解码在您的应用程序易于使用的XML响应。当您查询的WebService,你必须使用下列形式:

http://ws.geonames.org/timezone?lat=47.01&lng=10.2

然后将答案:{C}
示例应用程序将使用这个答案,并显示了结果:

所附的Visual Studio 2005年SmartDevice的Windows Mobile 5的项目有两类:GeonamesTZ是阻塞类和geonamesTZ是一个非阻塞类。
阻塞的代码是从来没有好,所以我实现了一个事件类。要使用的类,包括使用的地名命名空间声明,然后初始化一个新的geonamesTZ对象。然后添加一个事件处理程序对象的事件委托。最后,添加一个事件处理函数,将得到的时区数据。
using geonames;

    public partial class Form1 : Form

    {

        geonamesTZ myGeoTZ;

        geonamesTZfields tzFields;

 

        public Form1()

        {

            InitializeComponent();

            myGeoTZ = new geonamesTZ();

            myGeoTZ.geonamesEventHandler += new geonamesEvent(myGeoTZ_geonamesEvent);

        }

 

        void myGeoTZ_geonamesEvent(object sender, geonamesEventArgs e)

        {

            //Cursor.Current = Cursors.Default;

            //MessageBox.Show(e.m_myEventArgumentdata.strCountryName);

            tzFields = e.m_myEventArgumentdata;

            updateUI(tzFields);

        }

回答

评论会员:尤金Podsypalnikov 时间:2012/01/25
尝试和扩展它{S1}


void CColoredListReport::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

{

  CDC* pDC;

  pDC = CDC::FromHandle(lpDrawItemStruct->hDC);

 

  switch (lpDrawItemStruct->itemAction) {

   case ODA_DRAWENTIRE:

     CRect cRect(lpDrawItemStruct->rcItem);

     cRect.DeflateRect(0, 0, 1, 1);

     pDC->FillSolidRect(cRect, RGB(255, 249, 121));

     

     // The row frame

     pDC->MoveTo(cRect.left, cRect.bottom);

     pDC->LineTo(cRect.right, cRect.bottom);

     pDC->LineTo(cRect.right, cRect.top -1);

     

     // The cells frames and textes

 

     CRect cSubItemRect;

     GetSubItemRect(lpDrawItemStruct->itemID, 0, LVIR_LABEL, cSubItemRect);

     pDC->DrawText(GetItemText(0, 0), cSubItemRect, DT_CENTER|DT_VCENTER);

 

     GetSubItemRect(lpDrawItemStruct->itemID, 1, LVIR_LABEL, cSubItemRect);

     pDC->MoveTo(cSubItemRect.TopLeft());

     pDC->LineTo(cSubItemRect.left, cSubItemRect.bottom);

     pDC->DrawText(GetItemText(0, 1), cSubItemRect, DT_CENTER|DT_VCENTER);

  

     break;

  }

}
评论会员:尤金Podsypalnikov 时间:2012/01/25
你应该使用PDC -> FillSolidRect(CRECT,LT; YourRGBgt;)

在您的DrawItem(){S1}

请不要将它注释掉{S1}
评论会员:尤金Podsypalnikov 时间:2012/01/25
请再次采取cRect.DflateRect(0,0,1,1); {S1}
评论会员:尤金Podsypalnikov 时间:2012/01/25
你可以提供一个函数{S1}:{ BR}
COLORREF CColoredListReport::GetColorByIndex(int iRow)

{

  COLORREF crResult = iRow % 2 ? RGB(x, y, z) : RGB(z, x, y);

  return crResult;

}
...和使用中的DrawItem():
...

  pDC->FillSolidRect(cRect,

                     GetColorByIndex(lpDrawItemStruct->itemID));

...
评论会员:尤金Podsypalnikov 时间:2012/01/25
号错误的来源是放置在您的DrawItem(){S1}
评论会员:AJ83 时间:2012/01/25
你想要我来评论PDC"Erasebkground ()".?{ BR}
但我想这样的背景下,

任何其他建议
评论会员:?AJ83 时间:2012/01/25
在的DrawItem(),PDC -> FillSolidRect(),已经评论

我没有得到你想传达的正是
评论会员:。尤金Podsypalnikov 时间:2012/01/25
是。但它可能无法评论,
您应填写行的背景与方法... ... {S1}
评论会员:尤金Podsypalnikov 时间:2012/01/25
你可以尝试删除蟀风格
和帧所有者与黑线绘制细胞:
每个单元 - 在其底部和右侧(CYourList:的DrawItem (..))... {S1}
评论会员:AJ83 时间:2012/01/25
你有任何对于本示例代码,使我可以继续

我已经开始这方面的工作
评论会员:。尤金Podsypalnikov 时间:2012/01/25
你可能开始{S1}:

{C7 -}
评论会员:AJ83 时间:2012/01/25
尤金,

我的要求是:交替行的Multiline属性,真正的黄色

和网格线必须是黑色
评论会员:。AJ83 时间:2012/01/25
控制不来"的DrawItem ()".{ BR}我的所有者数据所有者绘制固定为真
评论会员:。尤金Podsypalnikov 时间:2012/01/25
现在是黄色{S1}

void CYourList::DrawItem(LPDRAWITEMSTRUCT pDIS) {

  CDC* pcDC = CDC::FromHandle(pDIS->hDC);

  switch (pDIS->itemAction) {

    case ODA_DRAWENTIRE: {

      CRect cItemRect(pDIS->rcItem);

      pcDC->FillSolidRect(cItemRect, RGB(255, 249, 121));

      pcDC->MoveTo(cItemRect.left,  cItemRect.bottom);

      pcDC->LineTo(cItemRect.right, cItemRect.bottom);

      pcDC->LineTo(cItemRect.right, cItemRect.top);

...

    }

    break;

  }

}
评论会员:尤金Podsypalnikov 时间:2012/01/25
请发表您的列表类,
它的实施和家长交流{S1}
评论会员:AJ83 时间:2012/01/25
List类:

头文件:

class CColoredListReport : public CListCtrl

{

	DECLARE_DYNAMIC(CColoredListReport)

public:

	CColoredListReport();

	virtual  CColoredListReport();

protected:

	DECLARE_MESSAGE_MAP()

public:

	virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);

};


CPP文件:
void CColoredListReport::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

{

 // TODO:  Add your code to draw the specified item



 CDC* pDC;

 pDC = CDC::FromHandle(lpDrawItemStruct->hDC);

 

 switch (lpDrawItemStruct->itemAction)

 {

   case ODA_DRAWENTIRE:

     CRect cRect(lpDrawItemStruct->rcItem);

     pDC->MoveTo(cRect.left, cRect.bottom);

     pDC->LineTo(cRect.right, cRect.bottom);

     pDC->LineTo(cRect.right, cRect.top);

 

     break;

  }

}


父类:
void CListForm::DoDataExchange(CDataExchange* pDX)

{

    CFormView::DoDataExchange(pDX);

 

    DDX_Control(pDX, IDC_LIST1, m_lstReportView);

}
评论会员:尤金Podsypalnikov 时间:2012/01/25
有什么画,
你要插入一些列和项目... ... {S1}

例如,在虚拟的空白CMainForm::OnInitialUpdate():
void CMainForm::OnInitialUpdate()

{

  UpdateData(FALSE);

 

  m_cList.InsertColumn(0, _T("Column 1"));

 

  m_cList.InsertItem(0, _T("item 1"));

  m_cList.InsertItem(1, _T("item 2"));

  m_cList.InsertItem(2, _T("item 3"));

  m_cList.InsertItem(3, _T("item 4"));

}
评论会员:AJ83 时间:2012/01/25
所有的控制首先是不会"的DrawItem ()".{ BR}
第二,我从CListForm访问m_lstReportView

以上这一切,我创造我自己的名单Ctrl键,其中包括黑色与彩色交替行的网格线。首先,我来实现这个以后我会做插入
评论会员:。尤金Podsypalnikov 时间:2012/01/25
非常好{S1}

但conrol会去那里
- 当它是必要的,例如绘制的项目

有没有项目在您的列表控件现在... ... {S1}
评论会员:AJ83 时间:2012/01/25
ohh。 K I得到你的观点。

是的,控制现在去那里。但它是只绘制水平线,但不垂直之一。

也没有显示插入项目