一、概念
二、函数
HWND WINAPI CreateWindow(LPCTSTR lpClassName, //指定一个窗口类,基于该窗口类创建窗口
LPCTSTR lpWindowName,//这个字符串会出现在标题栏中
DWORD dwStyle, //本窗口的风格
int x, //窗口左上角的x坐标
int y, //窗口又上角的y坐标
int nWidth, //窗口的宽度
int nHeight, //窗口的高度
HWND hWndParent, //窗口对象的父窗口句柄
HMENU hMenu, //窗口对象的菜单句柄或者子窗口编号
HINSTANCE hInstance, //当前进程的实例句柄
LPVOID lpParam); //窗口对象的参数指针句柄
/*
*这些函数和c语言的strcat,strcopy,printf差不多
*也可以说成是他们的替代品
*/
HRESULT StringCchCat(PTSTR pszDest, //母串
size_t cchDest, //此值必须等于长度pszSrc加上长度pszDest加1考虑两个字符串和终止空字符。
PCTSTR pszSrc); //子串 pszSrc要连接到pszDest的后边
HRESULT StringCchCopy(PTSTR pszDest, //母串
size_t cchDest, //长度
PCTSTR pszSrc); //被复制的串,之后pszDest == pszSrc
HRESULT StringCchPrintf(PTSTR pszDest, //母串
size_t cchDest, //母串缓冲池的大小
PCTSTR pszFormat, //类似表达式
................); //像printf("",这里的这些东西);
/*
*为了比较程序内部所用的字符串(如路径名,注册表项/值,元素/属性等),应该使用CompareStringOrdinal.
*由于这个函数执行的是码位(code-point)比较,不考虑区域设置,所以速度快。
*另外,由于程序内部所用的字符串一般不会向最终用户显示,所以在这种情况下,最适合使用这个函数。
*此函数只支持Unicode字符串。
*
*返回值
*返回0表明函数调用失败
*返回CSTR_LESS_THAN(定义为1)表明pString1小于pString2
*返回CSTR_EQUAL(定义为2)表明pString1等于pString2
*返回CSTR_GREATER_THAN(定义为3)表明pString1大于pString2
*为方便起见,如果函数成功,我们可以使返回值减去2,从而结果是我们常见的-1,0,1.
*/
int CompareStringOrdinal(PCWSTR pString1,//第一个字符串
int cchCount1, //大小
PCWSTR pString2,//第二个字符串
int cchCount2, //大小
BOOL bIgnorecase);//如果为TRUE则区分大小写,如果为FALSE则不区分大小写
/*我感觉最起码最近一段时间我是不会去用这两个函数的*/
int MultiByteToWideChar(UINT uCodePage, //与多字节字符串关联的一个代码页值,一般设为CP_ACP(ASCI代码页)
DWORD dwFlags, //指定额外的转换控制,一般为0
PCSTR pMultiByteStr,//要转换的多字节字符串
int cbMultiByte, //多字节字符串的字节数,为-1则自动判断字符串长度
PWSTR pWideCharStr, //转换后Unicode字符串的缓冲区
int cchWideChar); //接收缓冲区最大长度(字符数)。
int WideCharToMultiByte(UINT uCodePage, //标识要与新转换的字符串关联的代码页
DWORD dwFlags, //指定额外的转换控制,一般为0
PCWSTR pWideCharStr, //要转换的字符串的内存地址
int cchWideChar, //pWideCharStr字符串的长度(字符数),-1则有函数判断字符串长度
PSTR pMultiByteStr, //转换后得到多字节字符串的缓冲区
int cbMultiByte, //pMultiByteStr缓冲区的最大值(字节数),0则导致该函数返回目标缓冲区需要的大小,
//且返回值直接就是转换成功后所需的字节数,无需乘上sizeof...
PCSTR pDefaultChar, // 指向字符的指针, 在指定编码里找不到相应字符时使用此字符作为默认字符代替。
// 如果为NULL则使用系统默认字符。对于要求此参数为NULL的dwFlags而使用此参数,
//函数将失败返回并设置错误码ERROR_INVALID_PARAMETER。
PBOOL pfUsedDefaultChar);//开关变量的指针,用以表明是否使用过默认字符。对于要求此参数为NULL的dwFlags而使用此参数,
//函数将失败返回并设置错误码ERROR_INVALID_PARAMETER。
//lpDefaultChar和lpUsedDefaultChar都设为NULL,函数会更快一些。
三、实例
// HelloWin.cpp : 定义控制台应用程序的入口点。
//
/*------------------------------------------------------------
HELLOWIN.C -- Displays "Hello, Windows 98!" in client area
(c) Charles Petzold, 1998
------------------------------------------------------------*/
#include "stdafx.h"
#include <windows.h>
#include "resource1.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
Ccompare Compare;
Llink Link;
Ccopy Coppy;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("HelloWin") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_WINLOGO) ;
/*
IDI_APPLICATION 默认的应用程序图标。您可以看看HelloWin的样子,那个方框就是了。
IDI_ASTERISK 星号
IDI_EXCLAMATION 惊叹号
IDI_HAND 手形图标
IDI_QUESTION 问号
IDI_WINLOGO Windows徽标
*/
wndclass.hCursor = LoadCursor (NULL, IDC_HELP) ;
/*
IDC_APPSTARTING 标准箭头及小沙漏
IDC_ARROW 标准箭头
IDC_CROSS 十字交叉
IDC_HAND (Windows2000)手形
IDC_HELP 箭头和问号
IDC_IBEAM 文本I形
IDC_ICON 空图标
IDC_NO 斜杠圈
IDC_SIZE 四向箭头
IDC_SIZEALL 四向箭头
IDC_SIZENESW 指向东北和西南的双向箭头
IDC_SIZENS 指向南北的双向箭头
IDC_SIZENWSE 指向西北和东南的双向箭头
IDC_SIZEWE 指向东西的双向箭头
IDC_UPARROW 垂直箭头
IDC_WAIT 沙漏
*/
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
//wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
wndclass.lpszMenuName = L"IDR_MENU1" ;
HMENU hMenu;
/*
*菜单ID
*ID_MYMENU_40001 比较
*ID_MYMENU_40002 连接
*ID_MYMENU_40003 复制
*/
hMenu = LoadMenu(hInstance,(LPCWSTR)IDR_MENU1);
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, // window class name
TEXT ("The Hello Program"), // window caption
//WS_OVERLAPPEDWINDOW, // window style
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
hMenu, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd,SW_SHOWNORMAL);
// SW_SHOWMAXIMIZED SW_SHOWMINNOACTIVE iCmdShow
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message)
{
case WM_CREATE:
//PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
return 0 ;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case ID_MYMENU_40001: Compare.DoModal();break;
case ID_MYMENU_40002: Link.DoModal();break;
case ID_MYMENU_40003: Coppy.DoModal();break;
}
};
return 0;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rect) ;
DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;//
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
其它