昨天闲来无视,学习了一下WM的基本开发。看WM有约的那套教程心里痒痒,于是下载了SDK,看看DEMO,在Sample中的示例进行加工。小有一点心得。其实总的来说难度也不是很大,以前没有做过FORM的程序,都是WEB上面的开发,上手来看不是那么特别的困难也。
- 如果大家不明白安装了SDK之后,如何简历新的项目,如何做调整属性和模拟器的使用。可以参考我的文章下面的,讲的非常的清楚。这里我就不过多的浪费时间做些重复的事情了。
- 还是先看看效果好了,功能是比较简单的。建立自己的OutLook联系人,对其进行信息的发送和详细信息的管理。
- 以上是功能的初始界面。没什么多说的。联系人的管理。ADD功能可以跳转到手机的电话簿进行添加。
- 选中了联系人之后。进行编辑。或者是新建联系人界面也是如此的。OK保存,也就是Update。
- ADD之后的界面。
- Code
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.WindowsMobile.PocketOutlook;
using Microsoft.WindowsMobile.Forms;
using Microsoft.WindowsMobile.PocketOutlook.MessageInterception;
namespace SmsDefence
{
public partial class Form1 : Form
{
private Contact contactSelect;
private OutlookSession outLookSession;
public Form1()
{
this.outLookSession = new OutlookSession();
InitializeComponent();
this.InitializeListBox();
}
public Contact Select()
{
this.ShowDialog();
return this.contactSelect;
}
private void InitializeListBox()
{
this.listBox1.DataSource = null;
this.listBox1.DataSource = this.outLookSession.Contacts.Items;
this.listBox1.DisplayMember = "FileAs";
this.listBox1.ValueMember = "ItemId";
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("AlexLiu Software Development", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
}
private void menuItem1_Click(object sender, EventArgs e)
{
CreateNewConversation();
}
private void menuItem2_Click(object sender, EventArgs e)
{
this.Close();
}
private class Conversation
{
private Contact contact;
private string transcript;
private string phoneNumber;
public Conversation(Contact c)
{
contact = c;
phoneNumber = c.MobileTelephoneNumber;
}
public Contact Contact
{
get { return contact; }
}
public string Transcript
{
get { return transcript; }
}
public void AddToTranscript(string sender, string msg)
{
transcript = sender + ":" + msg + "\r\n" + transcript;
}
public string PhoneNumber
{
get { return phoneNumber; }
}
public override string ToString()
{
return contact.ToString();
}
}
private void CreateNewConversation()
{
Conversation currentConv = null;
ChooseContactDialog dlg = new ChooseContactDialog();
dlg.RequiredProperties = new ContactProperty[] { ContactProperty.AllTextMessaging };
if (dlg.ShowDialog() == DialogResult.OK)
{
foreach (Conversation conv in listBox1.Items)
{
if (conv.Contact.ItemId == dlg.SelectedContact.ItemId)
{
currentConv = conv;
break;
}
}
}
if (currentConv == null)
{
currentConv = new Conversation(dlg.SelectedContact);
listBox1.Items.Add(currentConv);
}
SwitchToConversation(currentConv);
}
private void SwitchToConversation(Conversation conversion)
{
listBox1.SelectedItem = conversion;
txtMsg.Focus();
}
private void button5_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnNew_Click(object sender, EventArgs e)
{
this.contactSelect = new Contact();
this.outLookSession.Contacts.Items.Add(contactSelect);
ContactEdit contactDialog = new ContactEdit();
contactDialog.Edit(ref contactSelect);
this.InitializeListBox();
}
private void btnEdit_Click(object sender, EventArgs e)
{
if (this.listBox1.SelectedItem != null)
{
contactSelect = this.listBox1.SelectedItem as Contact;
ContactEdit contactDialog = new ContactEdit();
contactDialog.Edit(ref contactSelect);
}
else { MessageBox.Show("you must select one contact"); }
}
private void btnSend_Click(object sender, EventArgs e)
{
try
{
contactSelect = this.listBox1.SelectedItem as Contact;
if (null == this.outLookSession.SmsAccount)
{
throw new ArgumentException("this account is not i");
}
SmsMessage s = new SmsMessage(contactSelect.MobileTelephoneNumber, this.txtMsg.Text);
s.Body = this.txtMsg.Text;
s.Send();
MessageBox.Show("Message Sent");
}
catch (NullReferenceException ex)
{
MessageBox.Show(ex.ToString());
}
}
}
} - 简要说明下:首先是Send方法,如果联系人的手机号码,不为空的话就可以进行信息的发送了。如果不为空,SDK中为我们提供了一个SmsMessage也是就是短信的发送类。新建一个对象s,初始化要指定发送的信息的内容的收件人的手机号码。s的body属性也就是信息体,是要发送的内容。对象的实例s调用Send()方法即可发送了。在Mobile中常用的也是对话框的弹出了。MessageBox.Show方法有几个重载的使用,其中最简单的就是指定弹出对话框所要显示的内容了。新建和编辑函数中的内容大体上面来说也是差不多的,新建的话就是把选中的联系人加入到OutLookSession联系中去。CreateNewConversation()函数,也就是点击ADD之后触发这个函数了,把联系人中的不重复加入进来。ChooseContactDialog这个类,建立一个对象之后,通过对象调用了ShowDialog方法即可进入到手机电话簿中联系人的选取中去。
- Code
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.WindowsMobile.Forms;
using Microsoft.WindowsMobile.PocketOutlook;
namespace SmsDefence
{
public partial class ContactEdit : Form
{
private Contact contactCreate;
public ContactEdit()
{
InitializeComponent();
}
private void menuItem2_Click(object sender, EventArgs e)
{
this.Close();
}
private void menuItem1_Click(object sender, EventArgs e)
{
this.Close();
}
public void Edit(ref Contact contact)
{
contactCreate = contact;
this.ShowDialog();
}
private void ContactEdit_Load(object sender, EventArgs e)
{
this.txtFirstName.DataBindings.Add("text", this.contactCreate, "FirstName");
this.txtLastName.DataBindings.Add("text", this.contactCreate, "LastName");
this.txtCompany.DataBindings.Add("text", this.contactCreate, "CompanyName");
this.txtEmail.DataBindings.Add("text", this.contactCreate, "Email1Address");
this.txtWorkPhone.DataBindings.Add("text", this.contactCreate, "BusinessTelephoneNumber");
this.txtMobile.DataBindings.Add("text", this.contactCreate, "MobileTelephoneNumber");
}
private void btnOK_Click(object sender, EventArgs e)
{
this.contactCreate.FileAs = this.contactCreate.LastName + "," + this.contactCreate.FirstName;
this.contactCreate.Update();
this.Close();
}
}
} - 以上的代码是另一个FORM的内容。其主要功能就是对联系人进行编辑或者是新建:当点击OK的时候触发的也就是BTNOK这个onclick时间了,重要的一个方法就是Update()对所做的操作进行更新。Close()我想不必说了。FORM的关闭。Edit方法中无非就是数据的绑定。
- 参考文章 WM有约:http://www.cnblogs.com/allenlooplee/archive/2009/01/14/1375941.html?CommentID=1440147#Post