(个人整理,仅做复习用 :D,转载注明出处:http://blog.csdn.net/hcbbt/article/details/42706501)
双字节字符集和Unicode字符集有何区别?采用双字节字符集有何问题
什么叫宽字符?什么是Unicode字符?它们有何区别?
讲述_Unicode识别子,TCHAR.h头文件的作用。
资源描述文件的作用是什么?资源编译器的功能是什么?
讲讲匈牙利命名惯例的约定,还要记住哪些习惯用法?
解释事件驱动程序的原理,并和过程式程序进行比较。
开始 -> 设置变量,结构 -> 填写窗口类的条款 -> 注册窗口类 -> 创建应用程序窗口 -> 在屏幕上显示窗口
进入消息循环并从队列中得到一个消息 <---------------------------
v ^
此消息是否为 WM_QUIT---非----> |
| | 是 窗口函数 |
|是 应用程序定义过的消息吗?----> 处理消息->|
v 否 V |
终止执行 对消息进行默认处理--------------->
过程式程序是按照编程人员编出程序的顺序执行,自顶向下,单执行流程式样。Windows程序执行过程是应用程序与操作系统相互通信对话的过程,和消息事件密切相关。
何谓动态链接?何谓静态链接?动态链接库文件的后缀是什么?
解释窗口类结构名与窗口类变量,为什么要填写窗口类条款?注册的作用是什么?
窗口类变量是依据窗口类结构条目印刷出来的存储区。
窗口类条款是窗口共同书写的记录,填写各条款,形成初始化的窗口类。
用哪个函数创建窗口?它是几个参数?请解释每一个参数?
HWND CreateWindow(
LPCTSTR lpClassName, //pointer to register class name
LPCTSTR lpWindowName, //pointer to window name
DWORD dwstyle, //window style
int X, //horizontal position of window
int Y, //vertical positon of window
int nWidth, //window width
int nHeight, //window height
HWND hWndParent, //handle to parent or owner window
HMENU hMenu, //handle to menu or child-window identifier
HANDLE hInstance, //handle to application instance
LPVOID lpParam //pointer to window-creation data
}
应用程序中用的窗口类名从哪里取得?
主程序WinMain和WndProc是如何联系的?
wndclass.lpfnWndProc = WndProc ; // 窗口消息处理程序地址
解释消息循环中的几个函数?
while (GetMessage (&msg, NULL, 0, 0)) { // 是否为 !WM_QUIT
TranslateMessage (&msg); // 规范化
DispatchMessage (&msg); // 调用
}
解释系统全局窗口类、应用全局窗口类、应用专用窗口类。
32位Windows支持哪三种窗口类?讲述每种窗口类的用法。
请解释窗口类结构名和窗口类名。
窗口类结构中常用的有哪几个载入函数?它们的用法如何?
HICON WINAPI LoadIcon( // 返回的指向图标的指针,如果失败,返回NULL
HINSTANCE hInstance, // 用户定义图标在哪个实例中, NULL为系统图标
LPCSTR lpIconName // 图标名,也称图标上的标签
);
HCURSOR WINAPI LoadCursor ( // 返回新载入的光标的句柄
HINSTANCE hInstance, // 载入的光标
LPCTSTR lpCursorName) // 预定义的光标资源名
GetStockObject(WHITE_BRUSH);//窗口背景色
客户区是窗口中的哪部分?
用哪个函数使得窗口客户区称为无效区域?用哪个函数取得无效区域的坐标?
Windows环境下,如何实现与设备无关的输出,为什么输出一定要通过GDI函数?
解释代号的意义?解释DC的意义?
解释GDI函数实现与设备无关输出的过程。
有哪两种方法获得屏幕的hDC?
InvalidateRect所决定的重画区和BeginPaint所决定的重画区有什么区别?
什么情况下产生WM_CREATE窗口消息?什么情况下产生WM_PAINT窗口消息?
为什么WM_SIZE消息后必然跟着一个WM_PAINT消息?
CS_HREDRAW|CS_VREDRAW
解释滚动条的范围和地址,设置滚动条的范围用哪个函数,设置滚动条的地址用哪个函数?
单击滚动条时会产生通知码,通知码在哪个参数中?意义如何?
何谓滚动条块当前地址,它一般是整数吗?何谓滚动滑块的大小?何谓“页面大小”?何谓范围?
什么是GDI对象?
画线函数和画图函数的区别是什么?
画椭圆线的函数是什么?画椭圆的函数是什么?
建立、选择和删除画笔用哪三个函数?
hPen1 = CreatePen (PS_SOLID, 1, 0); // 宽度为1的黑画笔
SelectObject (hdc, hPen1);
DeleteObject (hPen1);
取得设备描述表代号的方法是什么?
取得设备描述表中信息的函数是什么?
何谓解析度?屏幕的解析度和打印机的解析度有何不同?如何计算解析度?
何谓像素的色彩数?它和哪些因素有关?
COLORREF值是什么意思?何谓“RGB彩色”?
解释设备描述表的构成。修改、取得设备描述表的某属性都有专门的函数,一般在什么情况下进行?
HDC BeginPaint(HWND, PAINTSTRUCT *)
和EndPaint(HWND, PAINTSTURCT *)
HDC GetDC(HWND)
和int ReleaseDC(HWMD ,HDC)
HDC GetWindowDC(HWND)
和int ReleaseDC(HWMD ,HDC)
hdc=CreateDC(pszDriver,pszDevice,pszOutput,pData);
和DeleteDC(hdc);
仅需要获取一个设备内容的设备内容信息而不需进行绘制时,可以使用CreateC。什么是设备坐标?什么是逻辑坐标?
简述键盘输入的流程。
何谓具有输入焦点的窗口?何谓活动窗口?如何辨认活动窗口?
何谓系统消息队列?和应用程序消息队列的关系如何?
按照产生的按键消息分,按键分成哪两类?按键消息有哪四种形式?系统按键消息有什么特点?它在哪里处理?哪些不是系统按键消息?
WM_KEYDOWN
WM_SYSKEYDOWN
WM_KEYUP
WM_SYSKEYUP
WM_KEYDOWN
WM_KEYUP
什么是扫描码?什么是虚拟键码?为什么要用虚拟键码?
数字和字母的虚拟键码是怎样定义的?
窗口函数中WM_KEYDOWN消息处理分支中的wParam和SendMessage函数第三个参数wParam有什么不同?
字符消息是怎样产生的?字符消息有哪四个?用处如何?字符消息的结构如何?
WM_CHAR
WM_SYSCHAR
WM_DEADCHAR
WM_SYSDEADCHAR
鼠标是一种“必须要的选择设备”,如何应用GetSystemMetrics函数确认鼠标是否存在?
fMouse = GetSystemMetrics (SM_MOUSEPRESENT);
什么是鼠标游标?它是哪种图?鼠标的热点是什么?
鼠标的三个键如何标识?鼠标消息共有几个?鼠标消息与键盘消息的区别是什么?鼠标消息和鼠标的虚拟键码各自用什么前缀?
鼠标消息是怎样产生的?鼠标消息中的wparam,lparam各代表什么?
WM_MOUSEMOVE消息是怎样产生的?它有什么特点?
鼠标和Shift Ctrl键如何组合使用?
显示区域鼠标消息中的wParam和lParam参数代表什么?
什么是子窗口控制项?
SendMessage 和 PostMessage 有何区别
预定义的控制项窗口类有那七种?
通知码的作用是什么?P250 试说明键盘上的游标产生的通知码是以什么为前缀的?请列出按钮类、滚动类、编辑类、列表框类的通知码识别字的前缀。
比较CreateWindow函数创建子窗口控制项与CreateWindow函数创建主窗口?
WS_CHILD
和WS_VISIBLE
HMENU
CreateWindow共有11个参数,它们的作用是什么?对创建的子窗口的外形、性能有什么影响?为什么子窗口的窗口式样中要有WS_VISIBLE,而主窗口不要?
HWND CreateWindow(
LPCTSTR lpClassName, //pointer to register class name
LPCTSTR lpWindowName, //pointer to window name
DWORD dwstyle, //window style
int X, //horizontal position of window
int Y, //vertical positon of window
int nWidth, //window width
int nHeight, //window height
HWND hWndParent, //handle to parent or owner window
HMENU hMenu, //handle to menu or child-window identifier
HANDLE hInstance, //handle to application instance
LPVOID lpParam //pointer to window-creation data
}
WM_COMMAND是怎样产生的?
如何表示子窗口与父窗口之间的消息传送?
WM_COMMAND
父窗口向子窗口发送消息有哪些目的?
WM_CTLCOLORBTN消息是什么情况下产生的?有什么作用?
滚动条有哪两种?如何区分这两种滚动条?滚动条控制项有什么特点?
什么是窗口子类化?说明子类化的目的和方法。子窗口控制项的窗口函数是什么类型的?
什么是对话框?对话框分别哪几类?各类的特点如何?
模式对话框和共存式对话框的消息来源有什么不一样?
含有共存式对话框的应用程序其消息循环必须要做什么?
while (GetMessage (&msg, NULL, 0, 0)) {
if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg)) {
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
}
共存式对话框的建立与结束与模式对话框的建立与结束所用的API函数有什么区别?
非模式对话框的特点是什么?怎样建立?
模式对话框与非模式对话框的消息来源有何不同?
while (GetMessage (&msg, NULL, 0, 0)) {
if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg)) {
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
}
非模式对话框是怎样处理消息的?
GetMessage
判断是否为非模式,是就直接由 IsDialogMessage
处理,否则继续 TranslateMessage DispatchMessage
具体:while (GetMessage (&msg, NULL, 0, 0)) {
if (hDlgModeless == 0 || !IsDialogMessage(hDlgModeless, &msg)) {
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
}
程序中的“资源”的确切含义是什么?
后缀.ICO、.CUR、.BMP、.FNT、.DLG各代表哪种资源?
应用程序是怎样使用资源的?
简述菜单、菜单项、弹出菜单项、下拉式菜单的含义。
在应用程序中引用菜单有哪几种方法?
解释菜单代号,菜单项ID,菜单ID。
当选择菜单项时Windows通常会向菜单所在的窗口函数发送COMMAND消息。除此之外还要发送那些消息?
用程序实现菜单主要用哪两个函数,基本实现思路是什么?
hMenu = CreateMenu();//所建立菜单的菜单代号返回给hMenu
AppendMenu(hMenuPopup, MF_STRING, IDM_FILE_NEW, "&New");
给矩形填上红色
hBrush = CreateSolidBrush(RGB(255, 0, 0));
hBrush = CreateSolidBrush(RGB(0, 255, 0));
hBrush = CreateHatchBrush(HS_DIAGCROSS, RGB(0, 255, 0));
SelectObject(hdc, hBrush);
hPen = CreatePen(PS_DASH, 1, RGB(0,0,0)); 虚线
hPen = CreatePen(PS_DOT, 1, RGB(0,0,0));点线
hPen = CreatePen(PS_DASHDOT, 1, RGB(0,0,0));// PS_DASHDOT虚点线
hPen = CreatePen(PS_DASHDOTDOT, 1, RGB(0,0,0));// PS_DASHDOTDOT虚双点线
SelectObject(hdc, hBrush);
SelectObject(hdc, hPen);
画画
SetPixel (hdc, x, y, crColor); // 画点
MoveToEx(hdc, 0, 0, NULL); // 画线
LineTo(hdc, x, y);
Rectaangle(hdc, x, y, x, y); // 画矩形
Ellipse(hdc, x, y, x, y); // 椭圆
Triangle // 三角形
只有当按钮类型为BS_OWNERDRAW
也就是拥有者绘制按钮的时候拦截WM_CTLCOLORBTN
。
//设置按钮的属性为可自绘
HWND hBn = GetDlgItem(hDlg, IDOK);
SetWindowLong(hBn, GWL_STYLE, GetWindowLong(hBn, GWL_STYLE) | BS_OWNERDRAW);
return INT_PTR(TRUE);
// 然后再在WM_CTLCOLORBTN消息里执行:
case WM_CTLCOLORBTN ://设置按钮的颜色
if ((HWND)lParam == GetDlgItem(hDlg, IDOK)) {
HWND hbn = (HWND)lParam;
HDC hdc = (HDC)wParam;
RECT rc;
TCHAR text[64];
GetWindowText(hbn, text, 63);
GetClientRect(hbn, &rc);
SetTextColor(hdc, RGB(255, 255, 255));//设置按钮上文本的颜色
SetBkMode(hdc, TRANSPARENT);
DrawText(hdc, text, _tcslen(text), &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
return (INT_PTR)CreateSolidBrush(RGB(127,0,255));//返回画刷设置按钮的背景色
}
break;
模态
// in WndProc
case ID_TEST:
DialogBox(hInst, MAKEINTRESOURCE(IDD_TEST), hWnd, test);
break;
// in test func
case WM_COMMAND:
if (LOWORD(wParam) == IDC_BUTTON1 || LOWORD(wParam) == IDOK)
SetDlgItemText(hDlg, IDC_TTT, TEXT("Click And Change!"));
非模态
// in WndProc
case ID_TEST:
g_hToolbar = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_TOOLBAR),
hwnd, ToolDlgProc);
// in ToolDlgProc
case WM_COMMAND:
if (LOWORD(wParam) == IDC_BUTTON1 || LOWORD(wParam) == IDOK)
SetDlgItemText(hDlg, IDC_TTT, TEXT("Click And Change!"));