|
发表于 2019-5-19 18:40:14
|
显示全部楼层
很仔细看了你那程序,那是win32程序,win32那么原始地写就回到解放前了。
还是在控制台给你重写吧。既然没资源,就得自己造,代码多就不要埋怨,没资源就是这样。
代码的核心在OnCutClick(),其它的都是win32的,与应用的逻辑没太大关系。
不要添加rc,已经造出来了。
游戏没什么玩头,就像陪一个小娃娃挖沙,它这堆那堆,铲铲要帮他拿着。
如果不会程序造资源倒可以学习学习,特别是把win32弄成只会做一件事的东东,那我猜想
她每天可能就在用手机砸核桃。心疼的核桃怎么吃,而不是手机多少钱。
//
#include "stdafx.h"
#include <Windows.h>
#define ID_TIMER 1
#define IDC_L_X 1000
#define IDC_L_Y 1001
#define IDC_R_X 1002
#define IDC_R_Y 1003
#define IDC_HEIGHT 1004
#define IDC_WIDTH 1005
#define IDM_START 3001
#define IDM_CUT 3002
#define IDM_QUIT 3003
#define IDM_ABOUT 3100
#define ID_TEXT 4000
namespace app {
POINT left, right;
int height, width;
int cxSize, cySize;
HDC hdcMem;
HBITMAP hBitmap;
POINT pt;
auto count = 0;
auto flag = 0;
HINSTANCE hInstance;
TCHAR szAppName[] = TEXT("SCR_COPY");
TCHAR szString[] = TEXT("Hello, 千里眼");
HWND hwnd;
int iCmdShow = SW_SHOW;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime);
LRESULT CALLBACK HandleWmCreate(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK HandleWmCommand(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK HandleWmPaint(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK HandleWmHotkey(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK CfgDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT OnStartClick();
LRESULT OnCutClick();
LRESULT OnAboutClick();
void InitDlg(HWND hDlg);
void OnDlgOk(HWND hDlg);
void aboutdlg();
void cfgdlg();
LPWORD lpwAlign(LPWORD lpIn, ULONG dw2Power = 4);
};
using namespace app;
int main()
{
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(hInstance, szAppName);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
RegisterClass(&wndclass);
hwnd = CreateWindow(szAppName, TEXT("SCR_COPY"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
if (!IsDialogMessage(NULL, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
//定时器函数
void CALLBACK app::TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
if (iTimerID == ID_TIMER)
{
HDC hdc_me = GetDC(hwnd);
POINT pos, pos2;
HBRUSH hBrush;
//拷贝内存到窗口
BitBlt(hdc_me, 0, pt.y, width, height, hdcMem, 0, 0, SRCCOPY);
hBrush = CreateSolidBrush(RGB(255, 100, 255));
SelectObject(hdc_me, hBrush);
GetCursorPos(&pos);
pos2 = pos;
ScreenToClient(hwnd, &pos2);
//根据鼠标位置,在窗口上画一个球
Ellipse(hdc_me, pos.x - cxSize / 2 - 5, pos2.y - 5, pos.x - cxSize / 2 + 5, pos2.y + 5);
DeleteObject(hBrush);
ReleaseDC(hwnd, hdc_me);
}
}
LRESULT CALLBACK app::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:return HandleWmCreate(hwnd, message, wParam, lParam);
case WM_COMMAND:return HandleWmCommand(hwnd, message, wParam, lParam);
case WM_PAINT:return HandleWmPaint(hwnd, message, wParam, lParam);
case WM_HOTKEY:return HandleWmHotkey(hwnd, message, wParam, lParam);
case WM_DESTROY:KillTimer(hwnd, ID_TIMER);PostQuitMessage(0);return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
LRESULT CALLBACK app::HandleWmCreate(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
left.x = 8;
left.y = 192;
right.x = 517;
right.y = 192;
cxSize = GetSystemMetrics(SM_CXSCREEN);
cySize = GetSystemMetrics(SM_CYSCREEN);
width = cxSize / 2;
height = cySize;
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
RegisterHotKey(hwnd, 100, 0, VK_F4);
//SetWindowPos(hwnd, HWND_TOPMOST,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
HMENU hMenu = GetMenu(hwnd);
if (!hMenu) hMenu = CreateMenu();
HMENU hGameMenu = CreateMenu();
HMENU hHelpMenu = CreateMenu();
AppendMenu(hMenu, MF_POPUP, (LONG)hGameMenu, TEXT("游戏(G)"));
AppendMenu(hGameMenu, MF_STRING, IDM_START, TEXT("开始"));
AppendMenu(hGameMenu, MF_STRING, IDM_CUT, TEXT("剪切"));
AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
AppendMenu(hGameMenu, MF_STRING, IDM_QUIT, TEXT("退出"));
AppendMenu(hMenu, MF_POPUP, (LONG)hHelpMenu, TEXT("帮助"));
AppendMenu(hHelpMenu, MF_STRING, IDM_ABOUT, TEXT("关于"));
SetMenu(hwnd, hMenu);
return 0;
}
LRESULT CALLBACK app::HandleWmCommand(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (LOWORD(wParam))
{
case IDM_START:return OnStartClick();
case IDM_CUT:return OnCutClick();
case IDM_ABOUT: return OnAboutClick();
case IDM_QUIT:SendMessage(hwnd, WM_CLOSE, 0, 0);break;
}
return 0;
}
LRESULT CALLBACK app::HandleWmPaint(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT));
TextOut(hdc, 50, 50, szString, lstrlen(szString));
EndPaint(hwnd, &ps);
return 0;
}
LRESULT CALLBACK app::HandleWmHotkey(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
if (IsWindowVisible(hwnd)) ShowWindow(hwnd, SW_HIDE);
else ShowWindow(hwnd, SW_SHOW);
SendMessage(hwnd, WM_COMMAND, IDM_CUT, 0);
return 0;
}
LRESULT app::OnStartClick() {
cfgdlg();
//if (DialogBox(hInstance, TEXT("SCR_COPY"), hwnd, DlgProc))
InvalidateRect(hwnd, NULL, TRUE);
return 0;
}
LRESULT app::OnCutClick() {
MoveWindow(hwnd, cxSize / 2, 0, width, height, TRUE);
Sleep(200);
//建兼容内存设备
HDC hdc_me = GetDC(hwnd);
//存在则释放重建
if (hdcMem) {
SelectObject(hdcMem, NULL);
DeleteDC(hdcMem);
}
hdcMem = CreateCompatibleDC(hdc_me);
if (hBitmap)
{
DeleteObject(hBitmap);
hBitmap = NULL;
}
hBitmap = CreateCompatibleBitmap(hdc_me, width, height);
SelectObject(hdcMem, hBitmap);
//获取桌面设备
HWND desk_hwnd = GetDesktopWindow();
HDC hdc = GetDCEx(desk_hwnd, 0, DCX_LOCKWINDOWUPDATE);
pt = left;
ScreenToClient(hwnd, &pt);
//BitBlt(hdc_me,0,pt.y,width,height,hdc,left.x,left.y,SRCCOPY);
//按配置参数位置,把指定左起点桌面拷入内存
BitBlt(hdcMem, 0, 0, width, height, hdc, left.x, left.y, SRCCOPY);
//将窗口缩放与拷贝区重叠。这么折腾,大概意思就是不让下次拷贝把窗口也拷进去了
MoveWindow(hwnd, 0, 0, width, height, TRUE);//窗口移到右边
Sleep(200);
//把指定右桌面取反后拷入内存叠加
BitBlt(hdcMem, 0, 0, width, height, hdc, right.x, right.y, SRCINVERT);
//最后再把结果,内存拷入窗口
BitBlt(hdc_me, 0, pt.y, width, height,hdcMem, 0, 0, SRCCOPY);
// BitBlt(hdc_me,0,0,width,height,
// hdcMem,0,0,SRCCOPY); //程序编写时测试代码
//重置定时器
if (flag) KillTimer(hwnd, ID_TIMER);
flag = 1;
SetTimer(hwnd, ID_TIMER, 50, TimerProc);
ReleaseDC(hwnd, hdc_me);
ReleaseDC(desk_hwnd, hdc);
return 0;
}
LRESULT app::OnAboutClick() {
//DialogBox(hInstance, TEXT("AboutBox"), hwnd, AboutDlgProc);
aboutdlg();
return 0;
}
///////////////////////////////////////////////////////////////////
void app::InitDlg(HWND hDlg) {
SetDlgItemInt(hDlg, IDC_L_X, left.x, 0);
SetDlgItemInt(hDlg, IDC_L_Y, left.y, 0);
SetDlgItemInt(hDlg, IDC_R_X, right.x, 0);
SetDlgItemInt(hDlg, IDC_R_Y, right.y, 0);
SetDlgItemInt(hDlg, IDC_HEIGHT, height, 0);
SetDlgItemInt(hDlg, IDC_WIDTH, width, 0);
}
void app::OnDlgOk(HWND hDlg) {
left.x = GetDlgItemInt(hDlg, IDC_L_X, NULL, 0);
left.y = GetDlgItemInt(hDlg, IDC_L_Y, NULL, 0);
right.x = GetDlgItemInt(hDlg, IDC_R_X, NULL, 0);
right.y = GetDlgItemInt(hDlg, IDC_R_Y, NULL, 0);
height = GetDlgItemInt(hDlg, IDC_HEIGHT, NULL, 0);
width = GetDlgItemInt(hDlg, IDC_WIDTH, NULL, 0);
}
LPWORD app::lpwAlign(LPWORD lpIn, ULONG dw2Power)
{
ULONG ul;
ul = (ULONG)lpIn;
ul += dw2Power - 1;
ul &= ~(dw2Power - 1);
return (LPWORD)ul;
}
void app::cfgdlg() {
HGLOBAL hgbl;
LPDLGTEMPLATE lpdt;
LPDLGITEMTEMPLATE lpdit;
LPWORD lpw;
LPWSTR lpwsz;
int nchar;
hgbl = GlobalAlloc(GMEM_ZEROINIT, 1024);
if (!hgbl) return;
lpdt = (LPDLGTEMPLATE)GlobalLock(hgbl);
// 定义对话框.
lpdt->style = WS_POPUP | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | WS_CAPTION;
lpdt->cdit = 13; // 控件数
lpdt->x = 10; lpdt->y = 10; lpdt->cx = 400; lpdt->cy = 150;
//字
lpw = (LPWORD)(lpdt + 1);
*lpw++ = 0; // 无菜单
*lpw++ = 0; // 预定义对话框类(默认值)
//
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "参数", -1, lpwsz, 50);
lpw += nchar;
//
lpwsz = (LPWSTR)(LPWORD)(lpw + 1);
nchar = MultiByteToWideChar(CP_ACP, 0, "Arial", -1, lpwsz, 30);
lpw += nchar;
*lpw++ = 0;
// OK 按钮
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 130; lpdit->y = 100; lpdit->cx = 80; lpdit->cy = 20;
lpdit->id = IDOK;
lpdit->style = WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0080; // Button 类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "OK", -1, lpwsz, 50);
lpw += nchar;
*lpw++ = 0;
//==============================================================
// IDC_L_X 标签.
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 10; lpdit->y = 10; lpdit->cx = 100; lpdit->cy = 20;
lpdit->id = ID_TEXT;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT ;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0082; // label类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形左上X", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0;
// IDC_L_X 编辑框
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 110; lpdit->y = 10; lpdit->cx = 40; lpdit->cy = 20;
lpdit->id = IDC_L_X;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0081; // edit类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0;
//=============================================================
// IDC_L_Y标签
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 200, lpdit->y = 10, lpdit->cx = 100, lpdit->cy = 20;
lpdit->id = ID_TEXT;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT ;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0082; // label类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形左上Y", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0;
// IDC_L_Y 编辑框
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 300; lpdit->y = 10; lpdit->cx = 40; lpdit->cy = 20;
lpdit->id = IDC_L_Y;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0081; // edit类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0; // No creation data
//=============================================================
// IDC_R_X标签
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 10; lpdit->y = 30; lpdit->cx = 100; lpdit->cy = 20;
lpdit->id = ID_TEXT;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT ;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0082; // label类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形右下X", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0;
// IDC_R_Y 编辑框
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 110, lpdit->y = 30, lpdit->cx = 40, lpdit->cy = 20;
lpdit->id = IDC_R_X;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0081; // edit类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0; // No creation data
//=============================================================
// IDC_R_Y标签
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 200; lpdit->y = 30; lpdit->cx = 100;lpdit->cy = 20;
lpdit->id = ID_TEXT;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0082; // label类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形右下Y", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0;
// IDC_R_Y 编辑框
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 300; lpdit->y = 30; lpdit->cx = 40; lpdit->cy = 20;
lpdit->id = IDC_R_Y;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0081; // edit类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0; // No creation data
//=============================================================
// IDC_HEIGHT标签
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 10; lpdit->y = 50; lpdit->cx = 100; lpdit->cy = 20;
lpdit->id = ID_TEXT;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT ;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0082; // label类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形高度", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0;
// IDC_HEIGHT 编辑框
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 110; lpdit->y = 50; lpdit->cx = 40; lpdit->cy = 20;
lpdit->id = IDC_HEIGHT;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0081; // edit类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0; // No creation data
//=============================================================
// IDC_WIDTH标签
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 200; lpdit->y = 50; lpdit->cx = 100; lpdit->cy = 20;
lpdit->id = ID_TEXT;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT ;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0082; // label类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形宽度", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0;
// IDC_R_Y 编辑框
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 300; lpdit->y = 50; lpdit->cx = 40; lpdit->cy = 20;
lpdit->id = IDC_WIDTH;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0081; // edit类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
lpw += nchar;
*lpw++ = 0;
GlobalUnlock(hgbl);
HRESULT ret = DialogBoxIndirect(
GetModuleHandle(NULL),
(LPDLGTEMPLATE)hgbl,
NULL,
(DLGPROC)CfgDlgProc);
GlobalFree(hgbl);
}
void app::aboutdlg() {
HGLOBAL hgbl;
LPDLGTEMPLATE lpdt;
LPDLGITEMTEMPLATE lpdit;
LPWORD lpw;
LPWSTR lpwsz;
int nchar;
hgbl = GlobalAlloc(GMEM_ZEROINIT, 1024);
if (!hgbl) return ;
lpdt = (LPDLGTEMPLATE)GlobalLock(hgbl);
// 定义对话框.
lpdt->style = WS_POPUP | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | WS_CAPTION;
lpdt->cdit =2;
lpdt->x = 10;
lpdt->y = 10;
lpdt->cx = 200;
lpdt->cy = 100;
lpw = (LPWORD)(lpdt + 1);
*lpw++ = 0;
*lpw++ = 0;
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "关于", -1, lpwsz, 50);
lpw += nchar;
lpwsz = (LPWSTR)(LPWORD)(lpw + 1);
nchar = MultiByteToWideChar(CP_ACP, 0, "Arial", -1, lpwsz, 30);
lpw += nchar;
*lpw++ = 0;
//-----------------------
// 定义 OK 按钮
//-----------------------
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 100;
lpdit->y = 60;
lpdit->cx = 30;
lpdit->cy = 16;
lpdit->id = IDOK;
lpdit->style = WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0080;// Button 类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "OK", -1, lpwsz, 50);
lpw += nchar;
*lpw++ = 0;
////-----------------------
//// 定义静态文本控件.
////-----------------------
lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 10;
lpdit->y = 10;
lpdit->cx = 160;
lpdit->cy = 20;
lpdit->id = ID_TEXT;
lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0082; // STATIC类
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "欢迎来到Win32世界 !!!", -1, lpwsz,50);
lpw += nchar;
*lpw++ = 0;
GlobalUnlock(hgbl);
INT_PTR ret= DialogBoxIndirect(
GetModuleHandle(NULL),
(LPDLGTEMPLATE)hgbl,
NULL,
(DLGPROC)AboutDlgProc);
GlobalFree(hgbl);
}
BOOL CALLBACK app::CfgDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:InitDlg(hDlg);return TRUE;
case WM_CLOSE:EndDialog(hDlg, FALSE);return 0;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK) {
OnDlgOk(hDlg);
EndDialog(hDlg, TRUE);
return TRUE;
}
break;
}
return 0;
}
BOOL CALLBACK app::AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG: return TRUE;
case WM_CLOSE:EndDialog(hDlg, FALSE);return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:EndDialog(hDlg, 0);
return TRUE;
}
break;
}
return FALSE;
}
|
|