win32备忘

#include <Windows.h>

#include <stdlib.h>

#define IDM_OPT1 301

#define IDM_OPT2 302

#define IDM_BTN1 303

#define IDM_EDT1 304

#define IDM_EDT2 305

#define IDM_EDT3 306

LRESULT CALLBACK WindowProc(

_In_ HWND hwnd,

_In_ UINT uMsg,

_In_ WPARAM wParam,

_In_ LPARAM lParam

);

HMENU hRoot;

HWND hwndButton;

HWND hwnText;

HWND hwnText1;

HWND hwnText2;

void CreateMyMenu();//创建菜单

int CALLBACK WinMain(

_In_ HINSTANCE hInstance,

_In_ HINSTANCE hPrevInstance,

_In_ LPSTR lpCmdLine,

_In_ int nCmdShow

){

CreateMyMenu();

WCHAR* cls_Name = L"My Class";

WNDCLASS wc = {sizeof(WNDCLASS)};

wc.hbrBackground = (HBRUSH)(COLOR_WINDOW +1);

wc.lpfnWndProc = WindowProc;

wc.lpszClassName = cls_Name;

wc.hInstance = hInstance;

wc.style = CS_HREDRAW | CS_VREDRAW;

RegisterClass(&wc);

HWND hwnd = CreateWindow(

cls_Name,//类名

L"我的应用程序",//窗口标题文字

WS_OVERLAPPEDWINDOW,//窗口外观样式

38,//窗口相对于父级的x坐标

20,//窗口相对于父级的y坐标

800,//窗口的宽度

600,//窗口的高度

NULL,//没有父窗口,为NULL

hRoot,//没有菜单,为NULL

hInstance,//当前应用程序的实例句柄

NULL//没有附加数据,为NULL

);

if (hwnd == NULL){

return 0;

}

//ShowWindow的第一个参数就是刚才创建的窗口的句柄,第二个参数控制窗口如何显示

ShowWindow(hwnd, SW_SHOW);

UpdateWindow(hwnd);

MSG msg;

while (GetMessage(&msg, NULL, 0, 0)){

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return 0;

}

LRESULT CALLBACK WindowProc(

_In_ HWND hwnd,

_In_ UINT uMsg,

_In_ WPARAM wParam,

_In_ LPARAM lParam

){

switch (uMsg)

{

case WM_CREATE:{

hwndButton = CreateWindow(

TEXT("button"),

TEXT("anniu"),

WS_CHILD | WS_VISIBLE,

100,80,80,40,

hwnd, (HMENU)IDM_BTN1,

((LPCREATESTRUCT)lParam)->hInstance,NULL

);

//默认带边框

hwnText = CreateWindow(

TEXT("EDIT"),

TEXT("hello"),

WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL,

250,50,120,40,hwnd,

(HMENU)IDM_EDT1,

((LPCREATESTRUCT)lParam)->hInstance, NULL

);

//扩展3D样式

hwnText1 = CreateWindowEx(WS_EX_CLIENTEDGE,

TEXT("EDIT"),

TEXT("hello"),

WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_PASSWORD,

250,100,120,40,hwnd,

(HMENU)IDM_EDT2, ((LPCREATESTRUCT)lParam)->hInstance, NULL);

hwnText2 = CreateWindowEx(

WS_EX_CLIENTEDGE, TEXT("EDIT"), TEXT("hello"),

WS_VSCROLL|WS_VISIBLE|WS_CHILD|ES_AUTOVSCROLL|ES_MULTILINE

, 250, 150, 120, 100, hwnd, (HMENU)IDM_EDT3, ((LPCREATESTRUCT)lParam)->hInstance, NULL);

MoveWindow(hwnText2,250,200,120,200,TRUE);

}

return 0;

case WM_DESTROY:{

PostQuitMessage(0);

return 0;

}

case WM_COMMAND:{

switch (LOWORD(wParam))

{

case IDM_OPT1:

MessageBox(hwnd, L"feiji", L"tips", MB_OK);

break;

case IDM_OPT2:

MessageBox(hwnd, L"paodan", L"tips", MB_OK);

break;

case IDM_BTN1:

wchar_t *szName;

int iLength;

iLength = GetWindowTextLength(hwnText);

szName = (wchar_t*)malloc(iLength + 6);

wcscat_s(szName,iLength+ 6, L"--New");

SetWindowText(hwnText, szName);

MessageBox(hwnd, L"this is a btn", L"tips", MB_OK);

break;

default:

break;

}

}

return 0;

case WM_PAINT:{

PAINTSTRUCT ps;

BeginPaint(hwnd, &ps);

SetTextColor(ps.hdc, RGB(10, 0, 255));//设置文本颜色

DrawText(ps.hdc, L"朋友,你好", -1, &(ps.rcPaint), DT_CENTER);

//用于设置每个字符间隔的数组

int arr1[2] = { 45, 0 };

int arr2[3] = { 35, 40, 0 };

int arr3[2] = { 32, 0 };

POLYTEXT polys[] = {

{ 2, 2, 3, L"大家", ETO_CLIPPED, ps.rcPaint, &arr1[0] },

{ 2, 25, 3, L"新年好", ETO_CLIPPED, ps.rcPaint, &arr2[0] },

{ 30, 60, 3, L"快乐\0", ETO_CLIPPED, ps.rcPaint, &arr3[0] }

};

PolyTextOut(ps.hdc, &polys[0], 3);

//填充图形

//创建画刷

HBRUSH hb = CreateSolidBrush(RGB(0,255,0));

//画刷选择到当前DC中

HBRUSH orgBrs = (HBRUSH)SelectObject(ps.hdc, hb);

//填充图形

Ellipse(ps.hdc, 135, 35, 202, 170);

//选回原先的画刷

SelectObject(ps.hdc, orgBrs);

DeleteObject(hb);

EndPaint(hwnd, &ps);

}

break;

default:

break;

}

return DefWindowProc(hwnd, uMsg, wParam, lParam);

}

void CreateMyMenu(){

hRoot = CreateMenu();

if (!hRoot)

return;

HMENU pop1 = CreatePopupMenu();

AppendMenu(hRoot,

MF_POPUP,

(UINT_PTR)pop1,

L"操作");

AppendMenu(pop1,

MF_STRING,

IDM_OPT1,

L"飞机");

MENUITEMINFO mif;

mif.cbSize = sizeof(MENUITEMINFO);

mif.cch = 100;

mif.dwItemData = NULL;

mif.dwTypeData = L"机关枪";

mif.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;

mif.fState = MFS_ENABLED;

mif.fType = MIIM_STRING;

mif.wID = IDM_OPT2;

InsertMenuItem(pop1, IDM_OPT2, FALSE, &mif);

}

时间: 2024-08-11 03:37:48

win32备忘的相关文章

win32 备忘2

=============================mymain.h文件===================================== #include <Windows.h> #include <stdlib.h> //测试区 //http://www.baidu.com #define IDM_STATIC_DOMAIN1 101 #define IDM_BTN_OPEN1 102 //http://www.google.com #define IDM_STA

Nmap备忘单:从探索到漏洞利用(Part 2)

这是我们的第二期NMAP备忘单(第一期在此).基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM).现在,游戏开始了. TCP SYN扫描 SYN扫描是默认的且最流行的扫描选项是有一定原因的.它可以在不受防火墙限制的高速网络每秒扫描数千个端口 .同时也是相对不显眼的和隐蔽的,因为它永远不会完成TCP连接. 命令:NMAP -sS 目标 TCP连接扫描 当SYN扫描不可用的时候,TCP连接扫描是默认的TCP扫描类型.这是在用户不具有发送RAW数据包的特权的情况下.不是

RxJava & RxAndroid备忘

"你问我要去向何方,我指着大海的方向" 今天在刷G+的时候看到Dave Smith推荐了一个视频 <Learning RxJava (for Android) by example> 点进去看了一下,原来是位熟悉的"阿三哥",视频封面如下:(没有歧视的意思,不要喷我啊~,为什么感到熟悉?接着往下看) 几乎同时也看到了JetBrains在G+也推荐了篇在Medium上的博文 <RxAndroid And Kotlin (Part 1)> ,然后

工作备忘:cacti&nagios登录密码修改方法

[[email protected]]# mysql -u root -p mysql> use cacti; mysql> select * from user_auth; mysql> update user_auth set password=md5("cactipasswd") where id='1'; 现在cacti登录的新密码就是cactipasswd [[email protected]]# /usr/bin/htpasswd /usr/local/n

备忘-linux文件系统结构

用apache的时候总是要进入/var/www, 用久了开始好奇这些个目录都是派什么用处的,简单整理了一下 /bin 存放二进制命令文件,这个目录下面不允许存在子目录/boot bootloader的静态文件,当然OS的文件也必须在这里/dev 设备文件,MAKEDEV命令可以创建设备/etc 特定主机的配置文件,必须是静态文件,非可执行文件: opt, X11, sgml, xml/home 用户目录 /lib 存放主要的共享库和核心模块/media 可移除媒体的挂载点: floppy, cd

[转]Windows环境下尝试安装并配置PHP PEAR备忘

转自:http://wangye.org/blog/archives/266/ 什么是PEAR 来自百度百科:PEAR 是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写.它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR之于PHP就像是CPAN(Comprehensive Perl Archive Network)之于Perl. 由此可见PEAR是PHP代码的仓库,在这里可以找到很多有用的代码,避免我们重复写一些功能,

Table view 备忘

Table view 备忘 本篇会以备忘为主,主要是一些基础的代理方法和数据源方法具体的优化好点子会后续跟上. Table view的数据源方法 必须实现的数据源方法 // 返回每一行的cell,可以做缓存处理,同样也可能会造成复用问题. func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // tableview 和 cell 都是在s

oracle下 启动subversion命令 及 oracle相关服务启动备忘

linux shell下  svnserve - d -r + 目录   例如:svnserve -d -r /svn 启动 svn服务. 访问svn://192.168.0.120/kjcg 测试. 启动oracle: 一.如何启动数据库实例 1.进入到sqlplus启动实例 [[email protected] ~]$ su - oracle --“切换到oracle用户” 2. Password: [[email protected] ~]$ lsnrctl start  --“打开监听”

linux下常用命令备忘

转自:Linux 命令集锦 linux下查看监听端口对应的进程 # lsof -i:9000 # lsof -Pnl +M -i4 如果退格键变成了:"^h". 终端连接unix删除退格键,按住CTL键同时按delete Linux搜索 # find / -name "xxx.conf" 查看linux是32位还是64位的命令 #file /sbin/init #getconf LONG_BIT #getconf -a 在Linux和Windows下都可以用nslo