- 浏览: 177314 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
zhong504989:
你好。。请问你解决了么?我刚开始搞wap开发,用xhtml来, ...
ASP.NET Mobile Web Form 怎么设置背景图呢? -
xiaoqiang2008:
后台接收代码最好是用java写的
Windows Mobile 上传文件到服务器 -
xiaoqiang2008:
有后台接收的代码吗?能否贴上来看看,谢谢!
Windows Mobile 上传文件到服务器 -
guowee:
大家可以试着用一下ATL的HTML控件,不错的。
Windows mobile HTMLCtrl can not support WML ? -
guowee:
注意: 监控的文件夹名称最后不能有 \
windows mobile 监控 文件夹
1,从那种基本类中继承的函数 变异时都会自动被调用
2,void *memset(void *s,int c,size_t n)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
3,DoDataExchange中
编辑框 DDX_Text(pDX, IDC_EDTXSXM, m_xsxm);//把ID_EDITSXM这个控件和字符串 ID_EDITSXM映射起来
下拉菜单 DDX_CBString(pDX, IDC_CMBXSXB, m_xsxb);
UpdateData()这个函数是更新对话框显示内容
4,获得资源文件里Icon的图片
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
等同于 pApp = (CListCtrlUseApp*)AfxGetApp();
pApp->LoadIcon(IDI_NORMAL1)
后者是两部
5,void ZeroMemory(
PVOID Destination,
SIZE_T Length
);
The ZeroMemory macro fills a block of memory with zeros.
6,EnableWindow 设置鼠标和键盘对控件的有效性( Enables or disables mouse and keyboard input to the control site.)
((CEdit*)GetDlgItem(IDC_EDTXSBH))->EnableWindow(aValue);
7,wcscpy(string1,string2)复制字符串2到1
wcscat Append a string.
8,atoi() 字符型转变为整形
itoa() 整形转换为字符串
9,第几行=第几项
第几列=第几子项
10,
"HELLO" 那么编译器将从ansi字符串中组成该字符串。
L"HELLO" 那么编译器将使用Unicode编码。
如果使用MFC的_T宏,就有:如果定义了预处理符号_UNICODE,那么编译器将使用Unicode字符。
如果没有定义的话,就使用ansi字符。
11,
Cstring转换为 char*类型
方法1 GetBuffer函数
char *p;
CString = "hello";
p=str.GetBuffer(str.GetLength());
str.ReleaseBuffer();
方法2 memcpy函数
CString mCS=_T("cxl");
char mch[20];
memcpy(mch,mCS,mCS.GetLength());
方法3 LPCTSTR强制转换
char *ch;
CString str= _T("cxl");
ch=(LPSTR)(LPCTSTR)str;
//
char*转换为Cstring
方法 直接附值过去就行
char *p="this is a test";
CString s = p;
//
CString 转为wchar_t*
wchar_t* pwText = (wchar_t*)(LPCTSTR)strText;
12,
CString 转化为 int
方法 atoi()函数
CString str("352");
int iTem = atoi(str);
如果用Unicode 就用_ttoi()
其他方法 _tcstoul() _tcstol()
13,
关于引用做参数的说法:
传递一个引用和传递一个指针是一样的,都是传一个对象的地址过去,而传递一个对象过去的时候,还要重建一个对象,调用这个对象的拷贝构造函数等等,相比来说还是传递饮用和指针来得简单。
一般也不会传递简单类型的引用,除非你想在函数中改变它,这是一个基本的编程规则了。否则你维护程序的成本十分高的。而且象对int,char这样的简单对象,效率上差不了多少。(注)指针作参数好像还需要解引用,需要一点点开销,所以如果参数为非简单类型的对象还是用引用吧
14,
int a = 21;
double b = 3.45;
CString str1;
str1.Format(_T("%d"),a);
AfxMessageBox(str1); //显示21
str1.Format(_T("%2d"),a); //显示21
AfxMessageBox(str1);
CString str2;
str2.Format(_T("%.4f"),b);
AfxMessageBox(str2); //显示3.0045
str2.Format(_T("0%.4f"),b); //03.0045
AfxMessageBox(str2);
15,
int strcmp(const char *string1,const char *string2)
对比两个字符串
16,
转义字符 描述
\' 单引号
\" 双引号
\\ 反斜杠
\0 空字符
\a 响铃
\b 后退
\f 走纸
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\xnnn 表示十六进制数(nnn)
17,
USES_CONVERSION;
_acp=CP_UTF8;
第二句话如果不加 W2A和A2W是ascll和 wide char之间的转换,加上这句话作用就变成了utf-8和wide char之间的转换
18,
CREATE TABLE HHFF3
AS SELECT *
FROM ENGLISH_WORDS
WHERE CONTENT LIKE 'a%
19,
ShowWindow(SW_SHOW);//显示
ShowWindow(SW_RESTORE);//恢复
20,关于绘图
GDI 图形设备接口
CDC 设备环境类的基类
CPaintDC类 派生与CDC用于响应windows消息:WM_PAINT
CDC的其他派生类CWindowsDC,CClientDC
CDC的一个重要方法:selectobject 选择"绘图工具对象"
绘图工具类:
CPen,CBrush,CFont,CRgn,CPalette(调色板),CBitmap
CDC的一些方法:
21,清空CComboBox控件中编辑框中内容
m_comXinHua->SetEditSel(0, -1);
m_comXinHua->Clear();
22,作参数时:
CString strAAA;
FUN(CString strAAA )
{
}
这种情况下strAAA传进函数,函数对这个值进行了操作,但无论怎么操作都无法改变外边的值因为传进来的strAAA只是个副本
FUN(CString &strAAA)
{
}
这种情况下strAAA传进函数,函数对这个值进行了操作,外面的值也随之改变因为传进来的是个地址,按照这个地址直接操作的变量。
FUN( Const CString &strAAA )
{
}
这种情况下strAAA也是弄了个副本传进函数,但这个函数无法改变这个strAAA
23,
设置一个初始化一个CommandBar/菜单
//
if (!m_wndCommandBar.Create(this) ||!m_wndCommandBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;
}
m_wndCommandBar.SetBarStyle(m_wndCommandBar.GetBarStyle()|CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
设置工具条中按钮状态为"非激活状态"
CToolBarCtrl & tbc = m_wndCommandBar.GetToolBarCtrl();
tbc.EnableButton(uButtonID,TRUE) ;
又见过其它的两种写法(commandbar和菜单条基本一回事)
//**第一种(MainFrame里面初始化菜单的方法)
if (!m_wndCommandBar.Create(this) ||
!m_wndCommandBar.InsertMenuBar(IDR_MAINFRAME) ||
!m_wndCommandBar.AddAdornments(dwAdornmentFlags))
{
TRACE0("未能创建 CommandBar\n");
return -1; // 未能创建
}
m_wndCommandBar.SetBarStyle(m_wndCommandBar.GetBarStyle() | CBRS_SIZE_FIXED);
//**第二种梁辰常用作法
SHMENUBARINFO mbi;
memset(&mbi, 0, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.dwFlags = SHCMBF_HMENU;
mbi.hwndParent = m_hWnd;
mbi.nToolBarId = IDR_BACK_MENU;//菜单资源ID
mbi.hInstRes = ::AfxGetInstanceHandle();
SHCreateMenuBar(&mbi);
24,设置当前窗口标题(mobile右上角)
::SetWindowText(this->GetSafeHwnd(),L"DFD"); //this->GetSafeHwnd() 获得当前窗口句柄
其他更改标题方法:
调用CWnd : : SetWindowText可以改变任何窗口(包括控件)的标题。
//Set title for application's main frame window .
AfxGetMainWnd ( ) ―> SetWindowText (_T("Application title") );
//Set title for View's MDI child frame window .
GetParentFrame ( ) ―> SetWindowText ("_T ("MDI Child Frame new title") );
//Set title for dialog's push button control.
GetDigitem (IDC_BUTTON) ―> SetWindowText (_T ("Button new title ") );
25,工程属性页中的"消息"和"重写"
消息是指对标准Windows消息进行拦截,
重写是指MFC框架,留出的 常用的 方便大家实现所需功能的 改写用的函数,一般都是些虚函数,(Windows消息已被烂截,被指向了某些基类的标准处理函数,但这些没有什么特定功能,所以使用时,通过重写来完成特定功能的实现,
26,创建一个进程
CreateProcess(NULL,"d:\\test\\te.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) //"d:\\test\\te.exe"是您要运行的程序的路径
也可用ShellExecute与ShellExecuteEx这两个函数。功能更加强大,也常用于调用浏览器打开制定网页操作
27,
句柄:是一个数(通常为32位),它代表一个对象。程序几乎总是通过调用Windows函数获取句柄,程序在其他Windows函数中使用这个句柄,以引用这个对象。例如:
HINSTANCE:应用程序实例句柄,唯一标识该应用程序,其他Windows函数需要用该句柄作为参数来调用该应用程序。
HWND:窗口句柄
HDC:设备描述表句柄
28,
两个取得指针小函数
AfxGetApp() -- 返回指向当前工程的CWinApp对象的指针,
GetMainWnd()-- 返回指向主窗口对象的指针
29,
从应用程序的资源里加载制定字符串
LoadString(hInstance,IDS_APP_TITLE,wAppTile,MAXSIZE_APPBUF);
//它的第一个参数就使用到hInstance句柄。因此应用程序句柄是表示程序在资源上唯一的标识符。
//hInstance是当前应用程序的实例句柄,一般用来区分不同的资源使用。取得当前所在应用程序的实例句柄可以用 AfxGetInstanceHandle()
30,WM_NOTIFY消息
通知一个控件的父窗口一个消息在这个控件上上产生了。
父级对话框接在其窗口函数中接收到此消息要进行判断在这个控件上发生的是什么消息
在Win32中:
例:(例子中空间为html控件)
case WM_NOTIFY:
{
NM_HTMLVIEW* pnmHTMLView = (NM_HTMLVIEW*)lParam;
switch (pnmHTMLView->hdr.code)
{
case NM_HOTSPOT: //点击了链接
/////do some thing....
break;
case NM_TITLECHANGE://html标题变化了
/////do some thing....
break;
.
.
.
}
}
在Mfc中:对这个消息的封装是这样的:ON_NOTIFY(NM_DBLCLK, IDC_LISTCTRL, OnDblclkListctrl)
利用这个宏把这个窗口中IDC_LISTCTRL这个控件的NM_DBLCLK消息的触发放到,这个该控件的父窗口(这个类)的 OnDblclkListctrl()函数中取处理,当然有时候封装的原有东西不一定完全符合要求,所以必要时就要重写窗口过程函数,重新捕捉这个消息,像上面的例子一样
31,定义快捷键
HACCEL hAccelTable;
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN));
IDC_TESTWIN实在资源文件中定义的,定义方法请见windows API一日一练(10)
32,该函数用于获取对话框中指定控件的窗口句柄。
HWND GetDlgItem(HWND hDlg, int nIDDlgItem);
33,改变radio选框的选中状态,使用Button_SetCheck 宏
Button_SetCheck(GetDlgItem(hwnd, IDC_OPENSUCCEEDS), TRUE);
34,存储结构体的数组
35,
typedef char* PCHAR;
用PCHAR替换char*这种写法
36,
wsprintf函数
函数用法为:
int wsprintf( LPTSTR lpOut, // 输出缓冲区,最大为1024字节
LPCTSTR lpFmt, // 格式字符串
... // 需输出的参数);
将第3个参数转换成第二个参数那种格式的形式,lpOut保存这个格式化后的值,例如:
wsprintf(szBuffer,“%d“,x);
37,
CList和CArray前面是动态链表,后面是动态数组。两者都有非常有用。
CArray和CList采用两个参数:TYPE和ARG_TYPE。这些类可以存储任何在TYPE参数中指定的数据类型:
基本C++数据类型,如int、char和float
C++ 结构和类
定义的其他类型
考虑到方便性和效率,可以使用ARG_TYPE参数来指定函数参数的类型。通常情况下,将ARG_TYPE指定为对TYPE参数中命名类型的引用。例如:
CArray<int, int> myArray;
CList<CPerson, CPerson&> myList;
第一个示例声明了一个包含多个int的数组集合myArray。第二个示例声明了一个存储CPerson对象的列表集合myList。集合类的某些成员函数采用其类型由ARG_TYPE模板参数指定的参数。例如,CArray类的Add成员函数采用ARG_TYPE参数:
CArray<CPerson, CPerson&> myArray;
CPerson person;
myArray->Add(person);
38,连接dll文件并取出库中指定函数:
HINSTANCE h = ::LoadLibrary(L"\\Storage Card\\PIEHelper.dll");
if(h == NULL) {
//CString msg;
//msg.Format("Failed to find server %s",L"\\PIEHelper.dll");
AfxMessageBox(L"loadlibrary失败了!");
return FALSE;
}
FARPROC pFunc = ::GetProcAddress((HMODULE) h, L"DllRegisterServer");
if(pFunc == NULL) {
AfxMessageBox(L"Failed to find DllRegisterServer function");
return FALSE;
}
(*pFunc)(); // call the function to register the server
AfxMessageBox(L"Server registered OK");
39,
char buff[64];
strcpy(buff, "begin transaction ");//Copy a string.
strcat(buff, lpczName); //Append a string.
40,
// 创建一个窗口
CreateEx( 0, AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
pTitle,
WS_POPUP ,
rect,
NULL,
NULL,
NULL);
请查阅CreateEx和AfxRegisterWndClass函数定义更好的理解
41,继承Wnd的类只有直接或间接调用CreateEx或CreateWindowEX才算是个窗口。才会有窗口句柄。否则this->GetSafeHwnd()得到为空
42,将一个图片显示到窗口上
CWindowDC pDC(this);
CBitmap bitmap;
bitmap.Attach(SHLoadImageFile(_T("Application Data//Good.gif")));
//bitmap.CreateBitmap( l_rcClient.Width(), l_rcClient.Height(), 1, 1, NULL ) ;
//bitmap.LoadBitmap(IDB_BITMAP1)
BITMAP bmpInfo;
bitmap.GetBitmap(&bmpInfo);
CDC bitmapDC;
bitmapDC.CreateCompatibleDC(&pDC);
CBitmap* pOldBitmap = bitmapDC.SelectObject(&bitmap);
pDC.BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &bitmapDC,
0, 0, SRCCOPY);
bitmapDC.SelectObject(pOldBitmap);
bitmap.DeleteObject();
43,
写出运行结果:
{// test1
char str[] = "world"; cout << sizeof(str) << ": ";
char *p = str; cout << sizeof(p) << ": ";
char i = 10; cout << sizeof(i) << ": ";
void *pp = malloc(10); cout << sizeof(p) << endl;
}
6:4:1:4
注:每个char字符占一个字节 sizeof(*p)求得是指针占用空间而不是指针所指的值占的空间
44,
sizeof 简单的说其作用就是返回一个对象或者类型所占的内存字节数。
strlen 用来计算字符串的长度,必须以为char*作参数,且必须是以'\0'结尾的,但把'\0'计算在内
char* ss ="0123456789";
sizeof(ss)为4,这里求的是ss指针所占内存空间 32位操作系统中一个指针所占字节数为4
strlen(*ss)为1,*ss是第一个字符 这里求了一个字符的长度
char ss[] = "0123456789";
sizeof(ss)为11, ss是数组,计算到'\0'的位置,因此是(10+1)
sizeof(*ss)为1,*ss是第一个字符
char ss[100] = "0123456789";
sizeof(ss)为100,ss表示在内存中预分配的大小,100*1。
strlen(ss)为10, 它的内部实现是用一个循环计算字符串的长度,直到'\0'为止。
int ss[100]="0123456789";
sizeof(ss)为400,ss表示在内存中的大小,100*4。
strlen(ss)错误,strlen的参数只能是char*,且必须是以'\0'结尾的,但不把它计算在内
相关常数:
sizeof int:4
sizeof short:2
sizeof long:4
sizeof float:4
sizeof double:8
sizeof char:1
sizeof p:4
sizeof WORD:2
sizeof DWORD:4
45,
void bar(const string & s); 引用参数最好这样定义
因为如果把const去掉,以下两个中操作都是错误的
bar(foo( ));
bar("hello world");
原因:
原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。
引用型参数应该在能被定义为const的情况下,尽量定义为const 。
46,
(1)注 "abcdef" 12 这些都是常量
const int & ha = 1;//对
int &ha =1;//错
int i=1;//常量可以附值给普通变量
int &ha = i;//对
char * str = "abcdef";//指针可以指向常量
47,
关于static 数据成员 和 const数据成员
static 和其它的变量不同,它在编译时就被分配了一块内存,存储在内存中的全局变量区域,
C++中:静态数据成员所在的类的对象的销毁不会影响它。其它的变量(类中的)分配在栈中或堆中,在实例化时才被分配内存,被实例化的对象被销毁时,这些对象也被销毁
所以在类中声明一个static对象,它不属于具体的任何一个对象。而是属于这个类的一个数据成员。该类的所有的对象共同使用和维护它。
常用声明和初始化方法:
首先.h文件中 static int i;
然后在类的外部 int A::i = 2; <数据类型><类名>::<静态数据成员名>=<值>。
在类的外部定义的因为它独立于任何一个对象,如果在类中对它进行初始化那么每当一个对象被实例化时都会重新对它初始化,这就达不到"共同维护这个变量的目的"
C语言中:1,静态数据成员是一种虽然具有全局寿命但是局部可见的变量!如果定义在函数内部,作用域只在函数体内。如果在函数外定义则作用域只在该文件。但是寿命是全局的,只在程序结束 时才销毁。2,静态变量是在编译时赋值的,以后每次调用不再分配内存单元和重新初始化,只是保留上一次函数调用技术时的值。
const 必须进行初始化,对其进行初始化后这个值将不会被更改。该类型变量在声明后,任何函数都不能对其操作。只能 通过构造函数的初始化列表进行初始化。
首先.h文件中 const int i;
cpp文件中 A::A(int i):a(i)
{
}
2,void *memset(void *s,int c,size_t n)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
3,DoDataExchange中
编辑框 DDX_Text(pDX, IDC_EDTXSXM, m_xsxm);//把ID_EDITSXM这个控件和字符串 ID_EDITSXM映射起来
下拉菜单 DDX_CBString(pDX, IDC_CMBXSXB, m_xsxb);
UpdateData()这个函数是更新对话框显示内容
4,获得资源文件里Icon的图片
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
等同于 pApp = (CListCtrlUseApp*)AfxGetApp();
pApp->LoadIcon(IDI_NORMAL1)
后者是两部
5,void ZeroMemory(
PVOID Destination,
SIZE_T Length
);
The ZeroMemory macro fills a block of memory with zeros.
6,EnableWindow 设置鼠标和键盘对控件的有效性( Enables or disables mouse and keyboard input to the control site.)
((CEdit*)GetDlgItem(IDC_EDTXSBH))->EnableWindow(aValue);
7,wcscpy(string1,string2)复制字符串2到1
wcscat Append a string.
8,atoi() 字符型转变为整形
itoa() 整形转换为字符串
9,第几行=第几项
第几列=第几子项
10,
"HELLO" 那么编译器将从ansi字符串中组成该字符串。
L"HELLO" 那么编译器将使用Unicode编码。
如果使用MFC的_T宏,就有:如果定义了预处理符号_UNICODE,那么编译器将使用Unicode字符。
如果没有定义的话,就使用ansi字符。
11,
Cstring转换为 char*类型
方法1 GetBuffer函数
char *p;
CString = "hello";
p=str.GetBuffer(str.GetLength());
str.ReleaseBuffer();
方法2 memcpy函数
CString mCS=_T("cxl");
char mch[20];
memcpy(mch,mCS,mCS.GetLength());
方法3 LPCTSTR强制转换
char *ch;
CString str= _T("cxl");
ch=(LPSTR)(LPCTSTR)str;
//
char*转换为Cstring
方法 直接附值过去就行
char *p="this is a test";
CString s = p;
//
CString 转为wchar_t*
wchar_t* pwText = (wchar_t*)(LPCTSTR)strText;
12,
CString 转化为 int
方法 atoi()函数
CString str("352");
int iTem = atoi(str);
如果用Unicode 就用_ttoi()
其他方法 _tcstoul() _tcstol()
13,
关于引用做参数的说法:
传递一个引用和传递一个指针是一样的,都是传一个对象的地址过去,而传递一个对象过去的时候,还要重建一个对象,调用这个对象的拷贝构造函数等等,相比来说还是传递饮用和指针来得简单。
一般也不会传递简单类型的引用,除非你想在函数中改变它,这是一个基本的编程规则了。否则你维护程序的成本十分高的。而且象对int,char这样的简单对象,效率上差不了多少。(注)指针作参数好像还需要解引用,需要一点点开销,所以如果参数为非简单类型的对象还是用引用吧
14,
int a = 21;
double b = 3.45;
CString str1;
str1.Format(_T("%d"),a);
AfxMessageBox(str1); //显示21
str1.Format(_T("%2d"),a); //显示21
AfxMessageBox(str1);
CString str2;
str2.Format(_T("%.4f"),b);
AfxMessageBox(str2); //显示3.0045
str2.Format(_T("0%.4f"),b); //03.0045
AfxMessageBox(str2);
15,
int strcmp(const char *string1,const char *string2)
对比两个字符串
16,
转义字符 描述
\' 单引号
\" 双引号
\\ 反斜杠
\0 空字符
\a 响铃
\b 后退
\f 走纸
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\xnnn 表示十六进制数(nnn)
17,
USES_CONVERSION;
_acp=CP_UTF8;
第二句话如果不加 W2A和A2W是ascll和 wide char之间的转换,加上这句话作用就变成了utf-8和wide char之间的转换
18,
CREATE TABLE HHFF3
AS SELECT *
FROM ENGLISH_WORDS
WHERE CONTENT LIKE 'a%
19,
ShowWindow(SW_SHOW);//显示
ShowWindow(SW_RESTORE);//恢复
20,关于绘图
GDI 图形设备接口
CDC 设备环境类的基类
CPaintDC类 派生与CDC用于响应windows消息:WM_PAINT
CDC的其他派生类CWindowsDC,CClientDC
CDC的一个重要方法:selectobject 选择"绘图工具对象"
绘图工具类:
CPen,CBrush,CFont,CRgn,CPalette(调色板),CBitmap
CDC的一些方法:
21,清空CComboBox控件中编辑框中内容
m_comXinHua->SetEditSel(0, -1);
m_comXinHua->Clear();
22,作参数时:
CString strAAA;
FUN(CString strAAA )
{
}
这种情况下strAAA传进函数,函数对这个值进行了操作,但无论怎么操作都无法改变外边的值因为传进来的strAAA只是个副本
FUN(CString &strAAA)
{
}
这种情况下strAAA传进函数,函数对这个值进行了操作,外面的值也随之改变因为传进来的是个地址,按照这个地址直接操作的变量。
FUN( Const CString &strAAA )
{
}
这种情况下strAAA也是弄了个副本传进函数,但这个函数无法改变这个strAAA
23,
设置一个初始化一个CommandBar/菜单
//
if (!m_wndCommandBar.Create(this) ||!m_wndCommandBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;
}
m_wndCommandBar.SetBarStyle(m_wndCommandBar.GetBarStyle()|CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
设置工具条中按钮状态为"非激活状态"
CToolBarCtrl & tbc = m_wndCommandBar.GetToolBarCtrl();
tbc.EnableButton(uButtonID,TRUE) ;
又见过其它的两种写法(commandbar和菜单条基本一回事)
//**第一种(MainFrame里面初始化菜单的方法)
if (!m_wndCommandBar.Create(this) ||
!m_wndCommandBar.InsertMenuBar(IDR_MAINFRAME) ||
!m_wndCommandBar.AddAdornments(dwAdornmentFlags))
{
TRACE0("未能创建 CommandBar\n");
return -1; // 未能创建
}
m_wndCommandBar.SetBarStyle(m_wndCommandBar.GetBarStyle() | CBRS_SIZE_FIXED);
//**第二种梁辰常用作法
SHMENUBARINFO mbi;
memset(&mbi, 0, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.dwFlags = SHCMBF_HMENU;
mbi.hwndParent = m_hWnd;
mbi.nToolBarId = IDR_BACK_MENU;//菜单资源ID
mbi.hInstRes = ::AfxGetInstanceHandle();
SHCreateMenuBar(&mbi);
24,设置当前窗口标题(mobile右上角)
::SetWindowText(this->GetSafeHwnd(),L"DFD"); //this->GetSafeHwnd() 获得当前窗口句柄
其他更改标题方法:
调用CWnd : : SetWindowText可以改变任何窗口(包括控件)的标题。
//Set title for application's main frame window .
AfxGetMainWnd ( ) ―> SetWindowText (_T("Application title") );
//Set title for View's MDI child frame window .
GetParentFrame ( ) ―> SetWindowText ("_T ("MDI Child Frame new title") );
//Set title for dialog's push button control.
GetDigitem (IDC_BUTTON) ―> SetWindowText (_T ("Button new title ") );
25,工程属性页中的"消息"和"重写"
消息是指对标准Windows消息进行拦截,
重写是指MFC框架,留出的 常用的 方便大家实现所需功能的 改写用的函数,一般都是些虚函数,(Windows消息已被烂截,被指向了某些基类的标准处理函数,但这些没有什么特定功能,所以使用时,通过重写来完成特定功能的实现,
26,创建一个进程
CreateProcess(NULL,"d:\\test\\te.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) //"d:\\test\\te.exe"是您要运行的程序的路径
也可用ShellExecute与ShellExecuteEx这两个函数。功能更加强大,也常用于调用浏览器打开制定网页操作
27,
句柄:是一个数(通常为32位),它代表一个对象。程序几乎总是通过调用Windows函数获取句柄,程序在其他Windows函数中使用这个句柄,以引用这个对象。例如:
HINSTANCE:应用程序实例句柄,唯一标识该应用程序,其他Windows函数需要用该句柄作为参数来调用该应用程序。
HWND:窗口句柄
HDC:设备描述表句柄
28,
两个取得指针小函数
AfxGetApp() -- 返回指向当前工程的CWinApp对象的指针,
GetMainWnd()-- 返回指向主窗口对象的指针
29,
从应用程序的资源里加载制定字符串
LoadString(hInstance,IDS_APP_TITLE,wAppTile,MAXSIZE_APPBUF);
//它的第一个参数就使用到hInstance句柄。因此应用程序句柄是表示程序在资源上唯一的标识符。
//hInstance是当前应用程序的实例句柄,一般用来区分不同的资源使用。取得当前所在应用程序的实例句柄可以用 AfxGetInstanceHandle()
30,WM_NOTIFY消息
通知一个控件的父窗口一个消息在这个控件上上产生了。
父级对话框接在其窗口函数中接收到此消息要进行判断在这个控件上发生的是什么消息
在Win32中:
例:(例子中空间为html控件)
case WM_NOTIFY:
{
NM_HTMLVIEW* pnmHTMLView = (NM_HTMLVIEW*)lParam;
switch (pnmHTMLView->hdr.code)
{
case NM_HOTSPOT: //点击了链接
/////do some thing....
break;
case NM_TITLECHANGE://html标题变化了
/////do some thing....
break;
.
.
.
}
}
在Mfc中:对这个消息的封装是这样的:ON_NOTIFY(NM_DBLCLK, IDC_LISTCTRL, OnDblclkListctrl)
利用这个宏把这个窗口中IDC_LISTCTRL这个控件的NM_DBLCLK消息的触发放到,这个该控件的父窗口(这个类)的 OnDblclkListctrl()函数中取处理,当然有时候封装的原有东西不一定完全符合要求,所以必要时就要重写窗口过程函数,重新捕捉这个消息,像上面的例子一样
31,定义快捷键
HACCEL hAccelTable;
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN));
IDC_TESTWIN实在资源文件中定义的,定义方法请见windows API一日一练(10)
32,该函数用于获取对话框中指定控件的窗口句柄。
HWND GetDlgItem(HWND hDlg, int nIDDlgItem);
33,改变radio选框的选中状态,使用Button_SetCheck 宏
Button_SetCheck(GetDlgItem(hwnd, IDC_OPENSUCCEEDS), TRUE);
34,存储结构体的数组
// structures typedef struct tagHOUSEINFO { TCHAR szAddress[MAX_ADDRESS]; TCHAR szCity[MAX_CITY]; int iPrice; int iBeds; int iBaths; } HOUSEINFO; //array of houses HOUSEINFO rgHouseInfo[] = { {TEXT("100 Berry Lane"), TEXT("Redmond"), 175000, 3, 2 }, {TEXT("523 Apple Road"), TEXT("Redmond"), 125000, 4, 2}, {TEXT("1212 Peach Street"), TEXT("Redmond"),200000, 4, 3}, {TEXT("22 Daffodil Lane"), TEXT("Bellevue"), 2500000, 4, 4}, {TEXT("33542 Orchid Road"), TEXT("Bellevue"), 180000, 3, 2}, {TEXT("64134 Lily Street"), TEXT("Bellevue"), 250000, 4, 3}, {TEXT("33 Nicholas Lane"), TEXT("Seattle"), 350000, 3, 2}, {TEXT("555 Tracy Road"), TEXT("Seattle"), 140000, 3, 2}, {TEXT("446 Jean Street"), TEXT("Seattle"), 225000, 4, 3} };
35,
typedef char* PCHAR;
用PCHAR替换char*这种写法
36,
wsprintf函数
函数用法为:
int wsprintf( LPTSTR lpOut, // 输出缓冲区,最大为1024字节
LPCTSTR lpFmt, // 格式字符串
... // 需输出的参数);
将第3个参数转换成第二个参数那种格式的形式,lpOut保存这个格式化后的值,例如:
wsprintf(szBuffer,“%d“,x);
37,
CList和CArray前面是动态链表,后面是动态数组。两者都有非常有用。
CArray和CList采用两个参数:TYPE和ARG_TYPE。这些类可以存储任何在TYPE参数中指定的数据类型:
基本C++数据类型,如int、char和float
C++ 结构和类
定义的其他类型
考虑到方便性和效率,可以使用ARG_TYPE参数来指定函数参数的类型。通常情况下,将ARG_TYPE指定为对TYPE参数中命名类型的引用。例如:
CArray<int, int> myArray;
CList<CPerson, CPerson&> myList;
第一个示例声明了一个包含多个int的数组集合myArray。第二个示例声明了一个存储CPerson对象的列表集合myList。集合类的某些成员函数采用其类型由ARG_TYPE模板参数指定的参数。例如,CArray类的Add成员函数采用ARG_TYPE参数:
CArray<CPerson, CPerson&> myArray;
CPerson person;
myArray->Add(person);
38,连接dll文件并取出库中指定函数:
HINSTANCE h = ::LoadLibrary(L"\\Storage Card\\PIEHelper.dll");
if(h == NULL) {
//CString msg;
//msg.Format("Failed to find server %s",L"\\PIEHelper.dll");
AfxMessageBox(L"loadlibrary失败了!");
return FALSE;
}
FARPROC pFunc = ::GetProcAddress((HMODULE) h, L"DllRegisterServer");
if(pFunc == NULL) {
AfxMessageBox(L"Failed to find DllRegisterServer function");
return FALSE;
}
(*pFunc)(); // call the function to register the server
AfxMessageBox(L"Server registered OK");
39,
char buff[64];
strcpy(buff, "begin transaction ");//Copy a string.
strcat(buff, lpczName); //Append a string.
40,
// 创建一个窗口
CreateEx( 0, AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
pTitle,
WS_POPUP ,
rect,
NULL,
NULL,
NULL);
请查阅CreateEx和AfxRegisterWndClass函数定义更好的理解
41,继承Wnd的类只有直接或间接调用CreateEx或CreateWindowEX才算是个窗口。才会有窗口句柄。否则this->GetSafeHwnd()得到为空
42,将一个图片显示到窗口上
CWindowDC pDC(this);
CBitmap bitmap;
bitmap.Attach(SHLoadImageFile(_T("Application Data//Good.gif")));
//bitmap.CreateBitmap( l_rcClient.Width(), l_rcClient.Height(), 1, 1, NULL ) ;
//bitmap.LoadBitmap(IDB_BITMAP1)
BITMAP bmpInfo;
bitmap.GetBitmap(&bmpInfo);
CDC bitmapDC;
bitmapDC.CreateCompatibleDC(&pDC);
CBitmap* pOldBitmap = bitmapDC.SelectObject(&bitmap);
pDC.BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &bitmapDC,
0, 0, SRCCOPY);
bitmapDC.SelectObject(pOldBitmap);
bitmap.DeleteObject();
43,
写出运行结果:
{// test1
char str[] = "world"; cout << sizeof(str) << ": ";
char *p = str; cout << sizeof(p) << ": ";
char i = 10; cout << sizeof(i) << ": ";
void *pp = malloc(10); cout << sizeof(p) << endl;
}
6:4:1:4
注:每个char字符占一个字节 sizeof(*p)求得是指针占用空间而不是指针所指的值占的空间
44,
sizeof 简单的说其作用就是返回一个对象或者类型所占的内存字节数。
strlen 用来计算字符串的长度,必须以为char*作参数,且必须是以'\0'结尾的,但把'\0'计算在内
char* ss ="0123456789";
sizeof(ss)为4,这里求的是ss指针所占内存空间 32位操作系统中一个指针所占字节数为4
strlen(*ss)为1,*ss是第一个字符 这里求了一个字符的长度
char ss[] = "0123456789";
sizeof(ss)为11, ss是数组,计算到'\0'的位置,因此是(10+1)
sizeof(*ss)为1,*ss是第一个字符
char ss[100] = "0123456789";
sizeof(ss)为100,ss表示在内存中预分配的大小,100*1。
strlen(ss)为10, 它的内部实现是用一个循环计算字符串的长度,直到'\0'为止。
int ss[100]="0123456789";
sizeof(ss)为400,ss表示在内存中的大小,100*4。
strlen(ss)错误,strlen的参数只能是char*,且必须是以'\0'结尾的,但不把它计算在内
相关常数:
sizeof int:4
sizeof short:2
sizeof long:4
sizeof float:4
sizeof double:8
sizeof char:1
sizeof p:4
sizeof WORD:2
sizeof DWORD:4
45,
void bar(const string & s); 引用参数最好这样定义
因为如果把const去掉,以下两个中操作都是错误的
bar(foo( ));
bar("hello world");
原因:
原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。
引用型参数应该在能被定义为const的情况下,尽量定义为const 。
46,
(1)注 "abcdef" 12 这些都是常量
const int & ha = 1;//对
int &ha =1;//错
int i=1;//常量可以附值给普通变量
int &ha = i;//对
char * str = "abcdef";//指针可以指向常量
47,
关于static 数据成员 和 const数据成员
static 和其它的变量不同,它在编译时就被分配了一块内存,存储在内存中的全局变量区域,
C++中:静态数据成员所在的类的对象的销毁不会影响它。其它的变量(类中的)分配在栈中或堆中,在实例化时才被分配内存,被实例化的对象被销毁时,这些对象也被销毁
所以在类中声明一个static对象,它不属于具体的任何一个对象。而是属于这个类的一个数据成员。该类的所有的对象共同使用和维护它。
常用声明和初始化方法:
首先.h文件中 static int i;
然后在类的外部 int A::i = 2; <数据类型><类名>::<静态数据成员名>=<值>。
在类的外部定义的因为它独立于任何一个对象,如果在类中对它进行初始化那么每当一个对象被实例化时都会重新对它初始化,这就达不到"共同维护这个变量的目的"
C语言中:1,静态数据成员是一种虽然具有全局寿命但是局部可见的变量!如果定义在函数内部,作用域只在函数体内。如果在函数外定义则作用域只在该文件。但是寿命是全局的,只在程序结束 时才销毁。2,静态变量是在编译时赋值的,以后每次调用不再分配内存单元和重新初始化,只是保留上一次函数调用技术时的值。
const 必须进行初始化,对其进行初始化后这个值将不会被更改。该类型变量在声明后,任何函数都不能对其操作。只能 通过构造函数的初始化列表进行初始化。
首先.h文件中 const int i;
cpp文件中 A::A(int i):a(i)
{
}
发表评论
-
Windows mobile 菜单(Menu Bar) 更改解决方案
2010-04-07 09:06 2526Windows Mobile 菜单(Menu Bar,C ... -
Windows CE/Windows Mobile开发常见问题解答
2009-12-17 14:44 18421.怎样在一个控件获得 ... -
WM/PPC程序与控制面板命令参数
2009-12-17 14:39 1863不完全正确,不过值得参考: WINDOWS目录下的程序(中英 ... -
PC中如何判断网络已经连接或者断开
2009-12-17 14:38 1670在PPC的开发中有时需要判断网络什么时候连接,什么时候断开,并 ... -
PPC中如何找到正在使用中的网络(源代码)
2009-12-17 14:36 968《PPC中如何判断网络已 ... -
在Windows mobile中如何更改短信会话模式
2009-11-04 11:57 1928在windows mobile 中如何更改短信的会话模式呢。 ... -
GPS短信接收 与 导航软件通信
2009-10-29 14:10 1509这是开这个博客的第一篇文章, 在这里开博客主要是为了写一下以前 ... -
windows mobile MAPI Set EntryID
2009-08-17 16:02 0void CSmsMessage::SetEntryID(SB ... -
控制Windows Mobile手机的键盘操作
2009-08-07 11:59 2724如何控制Windows Mobile 手 ... -
WinCE Dialog 添加 Scrollbar
2009-06-22 16:53 4284如何在WinCE上设置滚动条? 最近再搞winCE ... -
Windows mobile HTMLCtrl can not support WML ?
2009-06-01 10:58 1410最近在使用windows mobile上的HTMLCtrl的时 ... -
Windows Mobile 今日插件开发
2009-05-27 16:06 4018http://blog.csdn.net/doubleblue ... -
Developing in C++ with the HTML Viewer Control
2009-05-22 09:34 2231[转载自MSDN:http://msdn.microsoft. ... -
Windows Mobile中使用htmlCtrl控件
2009-04-18 22:16 2405在某些特殊的应用场合,我们很想要一个类似IE功能的模块,定制自 ... -
推荐几篇关于Windows Mobile程序安装包制作的文章
2009-03-13 15:39 3523转载至:http://www.cnblogs.com/upt ... -
Hiding the Progress Bar of a .NET 2.0 CF WebBrowse
2009-03-11 14:08 1574[转载自:http://www.chriskarch ... -
如何处理屏幕方向改变
2009-03-01 10:02 1178在Windows Mobile平台的应用程序开发过程中, ... -
Windows Mobile中GPRS连接网络
2009-03-01 09:58 1700Windows Mobile程序中如果 ... -
Outgoing SMS intercepting
2009-02-27 14:33 1076http://social.msdn.microsoft.co ... -
CE MAPI实例讲解【http://heliboy110.blog.163.com/blog/s】
2009-02-27 14:32 1936(一)如何获取Inbox里的所有消息 第一次写这玩意,感 ...
相关推荐
总结来说,“RIL_parse.rar”提供了对Windows Mobile RIL的深入学习资料,结合“www.pudn.com.txt”的实战经验,可以帮助开发者在面对RIL相关问题时游刃有余,进一步提升其在移动通信领域的专业技能。
《手机回收小程序开发详解——以amouse_mobile_recycle 4.0.6为例》 在当前信息化社会,手机已经成为人们日常生活中不可或缺的一部分。随着科技的快速发展,手机更新换代的速度也在不断加快,由此产生的废旧手机...
总结,三星移动设备通用USB驱动是连接手机和电脑的重要工具,无论是普通用户的数据管理,还是开发者的应用调试,都离不开它的支持。保持驱动的最新状态,能够确保设备与电脑之间的通信畅通无阻,提高工作效率,提升...
根据提供的文件标题、描述、标签以及部分内容,我们可以总结出与SQL Mobile应用开发相关的知识点。以下是对这些信息的详细解读: ### SQL Mobile 应用开发概述 #### 一、SQL Mobile 简介 - **定义**:SQL Mobile ...
《Mobile移动开发宝典》第01章主要探讨了.NET Compact Framework在移动平台的应用,以及如何选择合适的开发工具和平台。对于初次涉足移动应用开发的程序员来说,这一章提供了宝贵的入门指导。 首先,.NET Compact ...
总结来说,jQuery Mobile通过提供一套简洁的API和丰富的主题机制,极大地降低了移动Web开发的复杂性。开发人员可以利用这个框架快速地开发出适合各种移动设备的网站和应用程序,同时保持它们的高性能和良好的用户...
根据提供的信息,我们可以总结出以下关于“ArcGIS Mobile开发入门教程”的相关知识点: ### ArcGIS Mobile 开发入门教程概述 #### 1. ArcGIS Mobile 平台简介 ArcGIS Mobile 是一个强大的移动地理信息系统(GIS)...
自己总结的,关于Windows Mobile环境的配置,以及Windows Mobile开发方面的知识,希望能帮助大家!
Windows Mobile开发是针对微软在移动设备上推出的嵌入式操作系统进行应用程序开发的过程。对于初学者,这是一个逐步学习和掌握技能的领域。本文将介绍Windows Mobile开发的基本环境配置和创建工程的步骤,帮助新手...
重要的是要记住,Pocket PC设备通常配备键盘和触摸屏,而Windows Mobile设备则通常是非触摸屏,带有键盘或小键盘,外观上更接近于UIQ和S60设备。 ### 3. 开始移植 开始移植前,理解两个平台的API历史至关重要。...
### 使用Adobe Flex 4.6和Flash Builder 4.6开发移动应用的关键知识点 #### 一、概述 在Adobe Flex 4.6和Flash Builder 4.6版本中,Adobe进一步增强了其移动应用开发能力,使得开发者能够更高效地创建跨平台的移动...
### Windows 下安装 Qt (Mobile 开发) - 详细步骤与注意事项 #### 一、环境准备与基础知识 在开始安装 Qt 进行 Windows Mobile 开发前,确保已经了解以下几个概念: - **Qt**:一个跨平台的 C++ 图形用户界面应用...
总结,Windows Mobile开发技术专题是一个全面的学习资源,涵盖了从基础理论到实际开发的全过程。通过学习,你不仅可以掌握Windows Mobile平台的开发技能,还能理解移动应用开发的核心原理,为未来在其他移动平台上...
总结,Google AdMob iOS SDK 的 Objective-C API 提供了丰富的广告功能,通过合理的集成和优化,开发者可以在保证用户体验的同时,有效地利用广告资源获取收益。实践中的关键在于理解 API,遵循最佳实践,并不断调整...
总结起来,`python_algerian_mobile_phone_number`是Python开发者处理阿尔及利亚移动电话号码的实用工具,它借助PyPI的便利性,使开发者能够轻松集成和使用。通过理解这个库的功能和使用方式,我们可以提高处理跨国...
华为Mobile Partner是一款由华为公司开发的多功能无线宽带上网工具,主要针对Windows操作系统设计,用于管理和控制3G和4G LTE等移动网络连接。这个“最新版Windows_V23”更新了软件的功能,提升了用户在使用移动数据...
**Windows Mobile 6.1 设备安全与开发新特性** Windows Mobile 6.1是微软在移动设备操作系统领域的里程碑,它在前代的基础上强化了安全性能,并引入了一系列开发者友好的新特性,使得企业级应用和消费者应用的开发...