#include <process.h>
#include <dos.h>
#include <conio.h>
#define Key_DOWN 0x5100
#define Key_UP 0x4900
#define Key_ESC 0x011b
#define Key_ALT_F 0x2100
#define Key_ALT_X 0x2d00
#define Key_ENTER 0x1c0d
void box(int startx,int starty,int high,int width)
main()
{
int i,key,x,y,l
char *menu[] =
/* 主菜单各项 */
char *red[] = /* 加上红色热键 */
char *f[] =
/* File 项的子菜单 */
char buf[16*10*2],buf1[16*2] /* 定义保存文本的缓冲区 */
while(1)
{
textbackground(BLUE)
clrscr()
textmode(C80)
window(1,1,80,1)/* 定义显示主菜单的窗口 */
textbackground(LIGHTGRAY)
textcolor(BLACK)
clrscr()
gotoxy(5,1)
for(i=0,l=0i<8i++)
{
x=wherex() /* 得茄蔽到当前光标的坐标 */
y=wherey()
cprintf("%s",menu[i])/* 显示各菜单项 */
l=strlen(menu[i]) /* 得到菜单项的长度 */
gotoxy(x,y)
textcolor(RED)
cprintf("%s",red[i]) /* 在主菜单项各头字符写上红字符 */
x=x+l+5
gotoxy(x,y)
textcolor(BLACK) /* 为显示下一个菜单项移动光标 */
}
gotoxy(5,1)
key=bioskey(0)
switch (key){
case Key_ALT_X:
exit(0)/* ALT_X 则退出 */
case Key_ALT_F:
{
textbackground(BLACK)
textcolor(WHITE)
gotoxy(5,1)
cprintf("%s",menu[0]) /* 加黑 File 项 */
gettext(5,2,20,12,buf)/* 保存窗口原来的文本 */
window(5,2,20,9)/* 设置作矩形框的颤旅州窗口 */
textbackground(LIGHTGRAY)
textcolor(BLACK)
clrscr()
box(1,1,7,16) /* 调用作框函数 */
for(i=2i<7i++)/* 显示子菜单各项 */
{ gotoxy(2,i)
cprintf("%s",f[i-2])
}
gettext(2,2,18,3,buf1) /*将下拉菜单的内容保存在 buf1*/
textbackground(BLACK)
textcolor(WHITE)
gotoxy(2,2)
cprintf("%s",f[0])/*加黑下拉菜单的第一项 load file*/
gotoxy(2,2)
y=2
while ((key=bioskey(0))!=Key_ALT_X) /* 等待选择下拉菜单项*/
{
if ((key==Key_UP)||(key==Key_DOWN))
{
puttext(2,y,18,y+1,buf1) /* 恢复原先的项 */
if (key==Key_UP)
y=y==2?6:y-1
else
y=y==6?2:y+1
gettext(2,y,18,y+1,buf1)/*保存要压上光条的子菜单项*/
textbackground(BLACK)
textcolor(WHITE)
gotoxy(2,y)
cprintf("%s",f[y-2])/* 产生黑条压在所选项上 */
gotoxy(2,y)
}
else
if (key==Key_ENTER)/* 若是回车键,判断是哪一子菜单按的回
车,在此没有相应的特殊处理*/
{
switch ( y-1 ){
case 1: /* 是子菜单项第一项:Load file */
break
case 2: /* Save file */
break
case 3:/* print */
break
case 4: /* modify */
break
case 5:
exit(0)
default:
break
}
break
}
else
if (key==Key_ESC)
break/* 是 Esc 键,返回主菜单 */
}
if (key==Key_ALT_X) exit(0)
break
}
}
}
}
void box(int startx,int starty,int high,int width) /* 画矩形框函数 */
{ int i
gotoxy(startx,starty)
putch(0xda) /* 画┌ */
for (i=startx+1i<widthi++) putch(0xc4) /* 画— */
putch(0xbf) /* 画┐ */
for( i=starty+1i<highi++)
{
gotoxy(startx,i)putch(0xb3) /* 画│ */
gotoxy(width,i)putch(0xb3) /* 画│ */
}
gotoxy(startx,high)
putch(0xc0) /* 画└ */
for (i=startx+1i<widthi++) putch(0xc4) /* 画— */
putch(0xd9) /* 画┘ */
return
}
这是最简单的界面程序 : // c++.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "c++.h"
#define MAX_LOADSTRING 100
// 全局变量:
HINSTANCE hInst // 当前实例
TCHAR szTitle[MAX_LOADSTRING] // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING] // 主窗口类名
// 此代码模蠢没没块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance)
BOOL InitInstance(HINSTANCE, int)
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM)
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance)
UNREFERENCED_PARAMETER(lpCmdLine)
// TODO: 在此放置代码。
MSG msg
HACCEL hAccelTable
// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING)
LoadString(hInstance, IDC_C, szWindowClass, MAX_LOADSTRING)
MyRegisterClass(hInstance)
// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_C))
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg)
DispatchMessage(&msg)
}
}
return (int) msg.wParam
}
//
// 函数: MyRegisterClass()
//
// 目的: 注册窗口类。
//
// 注释:
//
// 仅当希望
// 此代码与添加到 Windows 95 中的“RegisterClassEx”
// 函数带纳之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分察中重要,
// 这样应用程序就可以获得关联的
// “格式正确的”小图标。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex
wcex.cbSize = sizeof(WNDCLASSEX)
wcex.style = CS_HREDRAW | CS_VREDRAW
wcex.lpfnWndProc = WndProc
wcex.cbClsExtra = 0
wcex.cbWndExtra = 0
wcex.hInstance = hInstance
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_C))
wcex.hCursor = LoadCursor(NULL, IDC_ARROW)
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1)
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_C)
wcex.lpszClassName = szWindowClass
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL))
return RegisterClassEx(&wcex)
}
//
// 函数: InitInstance(HINSTANCE, int)
//
// 目的: 保存实例句柄并创建主窗口
//
// 注释:
//
// 在此函数中,我们在全局变量中保存实例句柄并
// 创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd
hInst = hInstance // 将实例句柄存储在全局变量中
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL)
if (!hWnd)
{
return FALSE
}
ShowWindow(hWnd, nCmdShow)
UpdateWindow(hWnd)
return TRUE
}
//
// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 目的: 处理主窗口的消息。
//
// WM_COMMAND - 处理应用程序菜单
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent
PAINTSTRUCT ps
HDC hdc
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam)
wmEvent = HIWORD(wParam)
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About)
break
case IDM_EXIT:
DestroyWindow(hWnd)
break
default:
return DefWindowProc(hWnd, message, wParam, lParam)
}
break
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps)
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps)
break
case WM_DESTROY:
PostQuitMessage(0)
break
default:
return DefWindowProc(hWnd, message, wParam, lParam)
}
return 0
}
// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam)
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam))
return (INT_PTR)TRUE
}
break
}
return (INT_PTR)FALSE
}
空窗口:
#include <windows.h>/* 所有的窗口输出到这里去 */
LRESULT CALLBACK WndProc(HWND 手型hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch(Message) {
/* 停止后,告诉主线程停止 */
case WM_DESTROY: {
PostQuitMessage(0)
break
}
/* 所有其他消息都使用默认程序处理 */
default:
return DefWindowProc(hwnd, Message, wParam, lParam)
}
return 0
}
/* Win32 GUI程序的主要功能:从这里开始执行 */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc /* 窗口的属性结构 */
HWND hwnd /* "句柄" 一个窗口的标识符 */
MSG Msg /* 所有消息的临时位置 */
/* 修改结构和设置的东西 */
memset(&wc,0,sizeof(wc))
wc.cbSize = sizeof(WNDCLASSEX)
wc.lpfnWndProc = WndProc /* 发送消息的地方 */
wc.hInstance = hInstance
wc.hCursor = LoadCursor(NULL, IDC_ARROW)
/* 白毕明猜色,COLOR_WINDOW是系统定义的颜色值,其数值是5 */
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1)
wc.lpszClassName = "WindowClass"
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION) /* 载入一个标准图标 */
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION) /* 使用名称“A”来作为该项目图标 */
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK)
return 0
}
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, /* x */
CW_USEDEFAULT, /* y */
640, /* 宽度 */
480, /* 高度 */
NULL,NULL,hInstance,NULL)
if(hwnd == NULL) {
MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK)
return 0
}
/*
所有的输入处理和发送到窗口过程。
注意,这个块代码流,直到它接收到的东西,
所以回路槐码不会产生不合理的高CPU使用率。
*/
while(GetMessage(&Msg, NULL, 0, 0) > 0) /* 如果没有收到任何错误…*/
{
TranslateMessage(&Msg) /* 如果存在翻译关键码字符*/
DispatchMessage(&Msg) /* 发送它到WndProc */
}
return Msg.wParam
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)