win32 自定义控件使用,必须要将自定义控件style = 0x50010000 0x50010000是三个样式的组合

来源:互联网 发布:樱井知香 大喷泉 编辑:程序博客网 时间:2024/06/07 06:40
// Win32Project12.cpp : 定义应用程序的入口点。
//


#include "stdafx.h"
#include "Win32Project12.h"


#define MAX_LOADSTRING 100
#define IDC_OKBTN 200


// 全局变量: 
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);
 HWND hOkBtn = NULL;
LRESULT CALLBACK StaticWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch (msg)
{
case WM_CREATE:
{
 hOkBtn = CreateWindowEx(0, L"Button", L"TEST", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON ,
 10, 20, 102, 30, hWnd, (HMENU) 111, (HINSTANCE)::GetWindowLong(hWnd, GWL_HINSTANCE)/* GetModuleHandle(NULL)*/, NULL);


 hOkBtn = CreateWindowEx(0, L"Button", L"TEST", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
 112, 20, 102, 30, hWnd, (HMENU) 111, (HINSTANCE)::GetWindowLong(hWnd, GWL_HINSTANCE)/* GetModuleHandle(NULL)*/, NULL);
 
}
break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}


BOOL RegB()
{


WNDCLASSEX wc;
ZeroMemory(&wc, sizeof(wc));
wc.cbSize = sizeof(wc);
wc.lpszClassName = L"gggg";
wc.lpfnWndProc = StaticWndProc;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.cbWndExtra = 0;
wc.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;// CS_HREDRAW;// CS_GLOBALCLASS/*|CS_SAVEBITS*/;
return RegisterClassEx(&wc);
}




int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR    lpCmdLine,
_In_ int       nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);


// TODO:  在此放置代码。
MSG msg;
HACCEL hAccelTable;


// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_WIN32PROJECT12, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);


RegB();
// 执行应用程序初始化: 
if (!InitInstance(hInstance, nCmdShow))
{
return FALSE;
}


hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT12));


// 主消息循环: 
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}


return (int) msg.wParam;
}






//
//  函数:  MyRegisterClass()
//
//  目的:  注册窗口类。
//
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_WIN32PROJECT12));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32PROJECT12);
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_INITDIALOG:


break;


case WM_COMMAND:
OutputDebugString(L"CCCCC");
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择: 
switch (wmId)
{
case IDM_ABOUT:
OutputDebugString(L"TTTT");
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
OutputDebugString(L"DDDD");
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);
TCHAR * search;
RECT rect = { 0 };
GetClientRect(hDlg, &rect);
HWND hOkBtn = NULL;
switch (message)
{
case WM_INITDIALOG:


CreateWindowEx(0, L"Button", L"button_登录.png", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
101, 201, 102, 30, hDlg, (HMENU) 111, GetModuleHandle(NULL), NULL);


// SetWindowLongPtr(hOkBtn, GWL_WNDPROC, (LONG_PTR) DlgLoginBtnPro);
// SetWindowLongPtr(hOkBtn, GWL_USERDATA, (LONG_PTR) ChangeOkBtnStatus);
// SendMessage(hOkBtn, WM_SETFOCUS, 0, 0);


return (INT_PTR) TRUE;


case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
search = L"E:\\c++\\Test\\2013\\Win32Project12\\Win32Project12\\LoginForm\\*.png";
WIN32_FIND_DATA fdd;
HANDLE AFind = FindFirstFile(search, &fdd);
TCHAR * s = NULL;
if (AFind != INVALID_HANDLE_VALUE)
do
{
s = fdd.cFileName;
int i;
//if (!(fdd..dwFileAttributes && FILE_ATTRIBUTE_DIRECTORY)) && valid_library_name(ffd.cFileName))
} while (FindNextFile(AFind, &fdd));
MessageBox(NULL, s, L"aa", 0);
FindClose(AFind);
//EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR) TRUE;
}
if (LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR) TRUE;
}
break;
}
return (INT_PTR) FALSE;
}
0 0