mirror of
https://github.com/reactos/reactos
synced 2025-10-08 09:22:51 +02:00
Compare commits
1 Commits
ReactOS-0.
...
ReactOS-0.
Author | SHA1 | Date | |
---|---|---|---|
|
5a0939913e |
@@ -17,6 +17,3 @@ reactos
|
||||
*.plg
|
||||
*.bak
|
||||
*.zip
|
||||
*.iso
|
||||
*.cab
|
||||
doxy-doc
|
||||
|
4
reactos/.gdbinit
Normal file
4
reactos/.gdbinit
Normal file
@@ -0,0 +1,4 @@
|
||||
directory /mnt/windows/CvsHome/reactos/ntoskrnl
|
||||
symbol-file ntoskrnl/ntoskrnl.nostrip.exe -mapped
|
||||
set remotebaud 115200
|
||||
target remote com2
|
@@ -1,62 +1,24 @@
|
||||
ReactOS is available thanks to the work of
|
||||
In no particular order
|
||||
|
||||
Emanuele Aliberti <ea@iol.it>
|
||||
Robert Bergkvist <fragdance@hotmail.com>
|
||||
Hartmut Birr <hartmut.birr@gmx.de>
|
||||
Aleksey Bragin <aleksey@studiocerebral.com>
|
||||
Richard Campbell <eek2121@comcast.net>
|
||||
Gunnar Andre' Dalsnes <hardon@online.no>
|
||||
Arindam Das
|
||||
Boudewijn Dekker <ariadne@xs4all.nl>
|
||||
Robert Dickenson <robd@reactos.org>
|
||||
Marty Dill <mdill@uvic.ca>
|
||||
Jason Eager
|
||||
Steven Edwards <steven_ed4153@yahoo.com>
|
||||
Iwan Fatahi <i_fatahi@hotmail.com>
|
||||
Jason Filby <jasonfilby@yahoo.com>
|
||||
Martin Fuchs <martin-fuchs@gmx.net>
|
||||
Jurgen van Gael <jurgen.vangael@student.kuleuven.ac.be>
|
||||
Ge van Geldorp <ge@gse.nl>
|
||||
Andrew Greenwood <lists@silverblade.co.uk>
|
||||
Casper S. Hornstrup <chorns@users.sourceforge.net>
|
||||
KJK::Hyperion <noog@libero.it>
|
||||
Eugene Ingerman <geneing@myrealbox.com>
|
||||
Rex Jolliff <rex@lvcablemodem.com>
|
||||
Guido de Jong
|
||||
Victor Kirhenshtein <sauros@iname.com>
|
||||
Eric Kohl <ekohl@rz-online.de>
|
||||
Hans Kremer
|
||||
Frederik Leemans
|
||||
Jean Michault
|
||||
Royce Mitchell III <royce3@ev1.net>
|
||||
Filip Navara <xnavara@volny.cz>
|
||||
Jim Noeth
|
||||
Mike Nordell ("tamlin")
|
||||
Hernan Ochoa
|
||||
Brian Palmer <brianp@sginet.com>
|
||||
Paolo Pantaleo <paolopan@freemail.it>
|
||||
Matt Pyne
|
||||
Phillip Susi <phreak@iag.net>
|
||||
James B. Tabor <jimtabor@adsl-64-217-116-74.dsl.hstntx.swbell.net>
|
||||
Mark Tempel <mtempel@visi.com>
|
||||
Vizzini <vizzini@plasmic.com>
|
||||
Mark Weaver <mark@npsl.co.uk>
|
||||
Thomas Weidenmueller <w3seek@users.sourceforge.net>
|
||||
Jason Weiler
|
||||
David Welch <welch@cwcom.net>
|
||||
Jonathan Wilson <jonwil@tpgi.com.au>
|
||||
Art Yerkes <ayerkes@speakeasy.net>
|
||||
|
||||
Graphic Design from
|
||||
|
||||
Everaldo (http://everaldo.com) for Explorer icons
|
||||
Rex Jolliff (rex@lvcablemodem.com)
|
||||
Boudewijn Dekker (ariadne@xs4all.nl)
|
||||
Eric Kohl (ekohl@rz-online.de)
|
||||
Emanuele Aliberti (ea@iol.it)
|
||||
David Welch (welch@cwcom.net)
|
||||
Iwan Fatahi (i_fatahi@hotmail.com)
|
||||
Robert Bergkvist (fragdance@hotmail.com)
|
||||
Victor Kirhenshtein (sauros@iname.com)
|
||||
Jason Filby (jasonfilby@yahoo.com)
|
||||
Brian Palmer (brianp@sginet.com)
|
||||
Phillip Susi (phreak@iag.net)
|
||||
Paolo Pantaleo (paolopan@freemail.it)
|
||||
Casper S. Hornstrup (chorns@users.sourceforge.net)
|
||||
|
||||
Source and inspiration from
|
||||
|
||||
WINE (http://www.winehq.com)
|
||||
WinFree (http://www.stack.nl/~onno/win32/)
|
||||
Linux (http://www.kernel.org)
|
||||
XFree86 (http://www.xfree86.org/)
|
||||
|
||||
References (Rex's at least)
|
||||
|
||||
@@ -76,3 +38,4 @@ Richter, Jeffery. Advanced Windows, 3rd ed. Microsoft, 1997.
|
||||
Simon, Richard J. Windows NT Win32 API Superbible. Waite Group, 1996.
|
||||
Solomon, David A. Inside Windows NT, 2nd Ed. Microsoft, 1998.
|
||||
"The NT Insider." Open Systems Resources, 1999-2000.
|
||||
|
||||
|
1945
reactos/ChangeLog
1945
reactos/ChangeLog
File diff suppressed because it is too large
Load Diff
211
reactos/Doxyfile
211
reactos/Doxyfile
@@ -1,211 +0,0 @@
|
||||
# Doxyfile 1.3.5
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
PROJECT_NAME = ReactOS
|
||||
PROJECT_NUMBER =
|
||||
OUTPUT_DIRECTORY = doxy-doc
|
||||
OUTPUT_LANGUAGE = English
|
||||
USE_WINDOWS_ENCODING = YES
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = YES
|
||||
STRIP_FROM_PATH = .
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = YES
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = NO
|
||||
INHERIT_DOCS = NO
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
TAB_SIZE = 8
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
SUBGROUPING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = YES
|
||||
EXTRACT_PRIVATE = YES
|
||||
EXTRACT_STATIC = YES
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = YES
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = NO
|
||||
WARNINGS = NO
|
||||
WARN_IF_UNDOCUMENTED = NO
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = hal \
|
||||
subsys \
|
||||
services \
|
||||
regtests \
|
||||
iface
|
||||
FILE_PATTERNS = *.c \
|
||||
*.h
|
||||
RECURSIVE = YES
|
||||
EXCLUDE = subsys/win32k \
|
||||
subsys/system/explorer
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS =
|
||||
EXAMPLE_RECURSIVE = YES
|
||||
IMAGE_PATH =
|
||||
INPUT_FILTER =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = YES
|
||||
INLINE_SOURCES = YES
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
VERBATIM_HEADERS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = YES
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT = html
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
DISABLE_INDEX = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
GENERATE_TREEVIEW = YES
|
||||
TREEVIEW_WIDTH = 250
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = NO
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = rtf
|
||||
COMPACT_RTF = YES
|
||||
RTF_HYPERLINKS = YES
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = NO
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = NO
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = NO
|
||||
MACRO_EXPANSION = NO
|
||||
EXPAND_ONLY_PREDEF = NO
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH = include
|
||||
INCLUDE_FILE_PATTERNS = *.h
|
||||
PREDEFINED =
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::addtions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = YES
|
||||
HIDE_UNDOC_RELATIONS = NO
|
||||
HAVE_DOT = YES
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
UML_LOOK = NO
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = YES
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DOT_IMAGE_FORMAT = png
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MAX_DOT_GRAPH_WIDTH = 1024
|
||||
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||
MAX_DOT_GRAPH_DEPTH = 0
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::addtions related to the search engine
|
||||
#---------------------------------------------------------------------------
|
||||
SEARCHENGINE = YES
|
@@ -1,7 +1,7 @@
|
||||
1. Build environment
|
||||
|
||||
To build the system you need either mingw32 installed on Windows or a mingw32
|
||||
cross compiler running on unix. You may obtain MinGW binaries that build
|
||||
cross compiler running on unix. You may obtain MinGW binaries that build
|
||||
ReactOS from http://www.reactos.com.
|
||||
|
||||
|
||||
@@ -9,9 +9,7 @@ ReactOS from http://www.reactos.com.
|
||||
|
||||
To build from Windows run 'make' (wihout the quotes) from the top directory.
|
||||
To build from unix, edit rules.mak and change the PREFIX variable to the
|
||||
correct value for your cross-compiler. Run 'export HOST=mingw32-linux' to
|
||||
tell the ReactOS build system that it is building ReactOS on a linux machine.
|
||||
Now run 'make'.
|
||||
correct value for your cross-compiler, then run 'make'.
|
||||
|
||||
|
||||
3. Installation
|
||||
@@ -46,9 +44,7 @@ If you are on linux this could be:
|
||||
INSTALL_DIR = /mnt/windows/reactos
|
||||
|
||||
Save the changes to rules.mak and run 'make install' to install the files to
|
||||
the new location. If you don't want to change rules.mak, you can specify the
|
||||
installtion directory when invoking make. Run
|
||||
'make INSTALL_DIR=c:\reactos install' to install to c:\reactos.
|
||||
the new location.
|
||||
|
||||
|
||||
3.2 Installation from binany distribution
|
||||
@@ -60,7 +56,13 @@ to c:\reactos. Remember to extract the files with full paths.
|
||||
4. Booting ReactOS
|
||||
|
||||
Startup in DOS mode. 'cd' to c:\reactos and type 'boot' and press <enter>.
|
||||
A simple shell is started where you can use simple commands like 'cd' and 'dir'.
|
||||
ReactOS will now boot and when it has booted, you are asked for a username and
|
||||
password. Just press <enter> twice as ReactOS does not currently have user
|
||||
validation. A simple shell is started where you can use simple commands like
|
||||
'cd' and 'dir'.
|
||||
|
||||
You may also want to try running the enhanced shell, cmd.exe, found in
|
||||
the rosapps CVS module.
|
||||
|
||||
|
||||
5. Help
|
||||
|
@@ -1,5 +0,0 @@
|
||||
# Main jamfile for ReactOS
|
||||
|
||||
SubDir ROS_TOP ;
|
||||
|
||||
SubInclude ROS_TOP Lib ;
|
@@ -1,54 +0,0 @@
|
||||
# customization for ReactOS goes here
|
||||
|
||||
# The SharedLibrary and SharedLibraryFromObjects rules were
|
||||
# borrowed from here:
|
||||
# http://www.differentpla.net/~roger/devel/jam/tutorial/shared_lib/index.html
|
||||
|
||||
SUFSHR = .dll ;
|
||||
RM = rm ; # rm comes with MinGW, and the default del doesn't work in some cases
|
||||
|
||||
rule SharedLibrary
|
||||
{
|
||||
SharedLibraryFromObjects $(<) : $(>:S=$(SUFOBJ)) ;
|
||||
Objects $(>) ;
|
||||
}
|
||||
|
||||
rule SharedLibraryFromObjects
|
||||
{
|
||||
local _s _t ;
|
||||
|
||||
# Add grist to file names
|
||||
# Add suffix to dll
|
||||
|
||||
_s = [ FGristFiles $(>) ] ;
|
||||
_t = [ FAppendSuffix $(<) : $(SUFSHR) ] ;
|
||||
|
||||
if $(_t) != $(<)
|
||||
{
|
||||
DEPENDS $(<) : $(_t) ;
|
||||
NOTFILE $(<) ;
|
||||
}
|
||||
|
||||
# make compiled sources a dependency of target
|
||||
|
||||
DEPENDS exe : $(_t) ;
|
||||
DEPENDS $(_t) : $(_s) ;
|
||||
MakeLocate $(_t) : $(LOCATE_TARGET) ;
|
||||
|
||||
Clean clean : $(_t) ;
|
||||
|
||||
Link $(_t) : $(_s) ;
|
||||
}
|
||||
|
||||
# nasm needs to know the output file first, or it doesn't
|
||||
# recognize -I :(
|
||||
actions As
|
||||
{
|
||||
$(AS) -o $(<) $(ASFLAGS) -I$(HDRS) $(>)
|
||||
}
|
||||
|
||||
AS = nasm ;
|
||||
|
||||
# why isn't DEFINES working? :(
|
||||
#DEFINES += _M_IX86 ;
|
||||
CCFLAGS += -D_M_IX86 ;
|
770
reactos/Makefile
770
reactos/Makefile
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
========================
|
||||
ReactOS Version 0.2.x
|
||||
Updated June 23rd, 2004
|
||||
ReactOS Version 0.1.x
|
||||
Updated March 19th, 2003
|
||||
========================
|
||||
|
||||
1. What is ReactOS?
|
||||
|
@@ -1,33 +0,0 @@
|
||||
; Format:
|
||||
; COMPONENT_NAME PATH_TO_COMPONENT_SOURCES
|
||||
; COMPONENT_NAME - Name of the component. Eg. kernel32.dll.
|
||||
; PATH_TO_COMPONENT_SOURCES - Relative path to sources (relative to
|
||||
; where rgenstat is run from).
|
||||
advapi32.dll reactos/lib/advapi32
|
||||
crtdll.dll reactos/lib/crtdll
|
||||
gdi32.dll reactos/lib/gdi32
|
||||
gdiplus.dll reactos/lib/gdiplus
|
||||
iphlpapi.dll reactos/lib/iphlpapi
|
||||
kernel32.dll reactos/lib/kernel32
|
||||
lz32.dll reactos/lib/lzexpand
|
||||
msvcrt.dll reactos/lib/msvcrt
|
||||
ole32.dll reactos/lib/ole32
|
||||
oleaut32.dll reactos/lib/oleaut32
|
||||
rpcrt4.dll reactos/lib/rpcrt4
|
||||
secur32.dll reactos/lib/secur32
|
||||
shell32.dll reactos/lib/shell32
|
||||
snmpapi.dll reactos/lib/snmpapi
|
||||
user32.dll reactos/lib/user32
|
||||
version.dll reactos/lib/version
|
||||
winmm.dll reactos/lib/winmm
|
||||
winspool.dll reactos/lib/winspool
|
||||
ws2_32.dll reactos/lib/ws2_32
|
||||
wsock32.dll reactos/lib/wsock32
|
||||
videoprt.dll reactos/drivers/video/videoprt
|
||||
ndis.sys reactos/drivers/net/ndis
|
||||
tdi.sys reactos/drivers/net/tdi
|
||||
class2.sys reactos/drivers/storage/class2
|
||||
scsiport.sys reactos/drivers/storage/scsiport
|
||||
ntoskrnl.exe reactos/ntoskrnl
|
||||
ntoskrnl.exe reactos/lib/rtl
|
||||
win32k.sys reactos/subsys/win32k
|
@@ -1 +0,0 @@
|
||||
doxy-doc
|
@@ -1,207 +0,0 @@
|
||||
# Doxyfile 1.3.5
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
PROJECT_NAME = "ReactOS Apps & Tools"
|
||||
PROJECT_NUMBER =
|
||||
OUTPUT_DIRECTORY = doxy-doc
|
||||
OUTPUT_LANGUAGE = English
|
||||
USE_WINDOWS_ENCODING = YES
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = YES
|
||||
STRIP_FROM_PATH = ..
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = YES
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = NO
|
||||
INHERIT_DOCS = NO
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
TAB_SIZE = 8
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
SUBGROUPING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = YES
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = NO
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = YES
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = NO
|
||||
WARNINGS = NO
|
||||
WARN_IF_UNDOCUMENTED = NO
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = . \
|
||||
../tools
|
||||
FILE_PATTERNS = *.c \
|
||||
*.h
|
||||
RECURSIVE = YES
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS =
|
||||
EXAMPLE_RECURSIVE = YES
|
||||
IMAGE_PATH =
|
||||
INPUT_FILTER =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = YES
|
||||
INLINE_SOURCES = YES
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
VERBATIM_HEADERS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = YES
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT = html
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
DISABLE_INDEX = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
GENERATE_TREEVIEW = YES
|
||||
TREEVIEW_WIDTH = 200
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = NO
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = rtf
|
||||
COMPACT_RTF = YES
|
||||
RTF_HYPERLINKS = YES
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = NO
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = NO
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = NO
|
||||
MACRO_EXPANSION = NO
|
||||
EXPAND_ONLY_PREDEF = NO
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH = ../include
|
||||
INCLUDE_FILE_PATTERNS = *.h
|
||||
PREDEFINED =
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::addtions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = YES
|
||||
HIDE_UNDOC_RELATIONS = NO
|
||||
HAVE_DOT = YES
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
UML_LOOK = NO
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = YES
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DOT_IMAGE_FORMAT = png
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MAX_DOT_GRAPH_WIDTH = 1024
|
||||
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||
MAX_DOT_GRAPH_DEPTH = 0
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::addtions related to the search engine
|
||||
#---------------------------------------------------------------------------
|
||||
SEARCHENGINE = YES
|
@@ -1,13 +0,0 @@
|
||||
# $Id: Makefile,v 1.1 2003/12/06 23:10:50 mf Exp $
|
||||
#
|
||||
# ReactOS apps and tools makefile to generate Doxygen documentation
|
||||
#
|
||||
|
||||
|
||||
docu:
|
||||
doxygen Doxyfile
|
||||
|
||||
.PHONY: docu
|
||||
|
||||
|
||||
# EOF
|
@@ -6,18 +6,16 @@ PATH_TO_TOP = ../..
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
# test_old tests
|
||||
TEST_APPS = accelerator alive alphablend apc args atomtest bench bitblt button \
|
||||
button2 capclock carets combo consume copymove count dibtest dump_shared_data \
|
||||
edit enumwnd enumws event global_mem gradient hello mdi \
|
||||
hivetest icontest isotest lineclip linetest lpc \
|
||||
mktime mstest multithrdwin multiwin mutex nptest patblt primitives pteb \
|
||||
regtest sectest sertest shaptest shm statst statst2 stretchblt suspend \
|
||||
tcpsvr terminate txtscale thread thread_msg tokentest user32 vmtest \
|
||||
winhello wm_erasebkgnd wm_paint eventpair threadwait popupmenu \
|
||||
map_dup_inherit p_dup_handle apc2 enhmetafile dirdlg guithreadinfo fiber
|
||||
# Build failure:
|
||||
# kernel32
|
||||
|
||||
# Test applications
|
||||
# alive apc args atomtest bench bitblt consume copymove count dump_shared_data
|
||||
# event file gditest hello isotest lpc messagebox mstest mutex nptest
|
||||
# patblt pteb regtest sectest shm thread vmtest winhello shaptest
|
||||
TEST_APPS = alive apc args atomtest bench consume copymove count \
|
||||
dump_shared_data event file gditest hello isotest lpc messagebox \
|
||||
mstest mutex event file gditest hello isotest lpc messagebox mstest \
|
||||
mutex nptest pteb regtest sectest shm thread tokentest vmtest \
|
||||
winhello dibtest lock hivetest shaptest
|
||||
|
||||
TEST_MISC =
|
||||
|
||||
@@ -34,7 +32,10 @@ clean: $(TEST_APPS:%=%_clean) \
|
||||
install: $(TEST_APPS:%=%_install) \
|
||||
$(TEST_MISC:%=%_install)
|
||||
|
||||
.PHONY: all depends implib clean install
|
||||
dist: $(TEST_APPS:%=%_dist) \
|
||||
$(TEST_MISC:%=%_dist)
|
||||
|
||||
.PHONY: all depends implib clean install dist
|
||||
|
||||
|
||||
#
|
||||
@@ -49,10 +50,13 @@ $(TEST_APPS:%=%_implib): %_implib:
|
||||
$(TEST_APPS:%=%_clean): %_clean:
|
||||
$(MAKE) -C $* clean
|
||||
|
||||
$(TEST_APPS:%=%_dist): %_dist:
|
||||
$(MAKE) -C $* dist
|
||||
|
||||
$(TEST_APPS:%=%_install): %_install:
|
||||
$(MAKE) -C $* install
|
||||
|
||||
.PHONY: $(TEST_APPS) $(TEST_APPS:%=%_implib) $(TEST_APPS:%=%_clean) $(TEST_APPS:%=%_install)
|
||||
.PHONY: $(TEST_APPS) $(TEST_APPS:%=%_implib) $(TEST_APPS:%=%_clean) $(TEST_APPS:%=%_install) $(TEST_APPS:%=%_dist)
|
||||
|
||||
|
||||
#
|
||||
@@ -67,13 +71,17 @@ $(TEST_MISC:%=%_implib): %_implib:
|
||||
$(TEST_MISC:%=%_clean): %_clean:
|
||||
$(MAKE) -C tests/$* clean
|
||||
|
||||
$(TEST_MISC:%=%_dist): %_dist:
|
||||
$(MAKE) -C tests/$* dist
|
||||
|
||||
$(TEST_MISC:%=%_install): %_install:
|
||||
$(MAKE) -C tests/$* install
|
||||
|
||||
.PHONY: $(TEST_MISC) $(TEST_MISC:%=%_implib) $(TEST_MISC:%=%_clean) $(TEST_MISC:%=%_install)
|
||||
.PHONY: $(TEST_MISC) $(TEST_MISC:%=%_implib) $(TEST_MISC:%=%_clean) $(TEST_MISC:%=%_install) $(TEST_MISC:%=%_dist)
|
||||
|
||||
|
||||
etags:
|
||||
find . -name "*.[ch]" -print | etags --language=c -
|
||||
|
||||
# EOF
|
||||
|
||||
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,19 +0,0 @@
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = windows
|
||||
|
||||
TARGET_NAME = accelerator
|
||||
|
||||
#TARGET_SDKLIBS = kernel32.a user32.a
|
||||
|
||||
TARGET_OBJECTS = accelerator.o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
@@ -1,161 +0,0 @@
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#define ID_ACCEL1 0x100
|
||||
#define ID_ACCEL2 0x101
|
||||
#define ID_ACCEL3 0x102
|
||||
#define ID_ACCEL4 0x103
|
||||
|
||||
/*
|
||||
* {fVirt, key, cmd}
|
||||
* fVirt |= FVIRTKEY | FCONTROL | FALT | FSHIFT
|
||||
*/
|
||||
//static HFONT tf;
|
||||
static ACCEL Accelerators[4] = {
|
||||
{ FVIRTKEY, VK_A, ID_ACCEL1},
|
||||
{ FVIRTKEY | FSHIFT, VK_A, ID_ACCEL2},
|
||||
{ FVIRTKEY | FCONTROL, VK_A, ID_ACCEL3},
|
||||
{ FVIRTKEY | FALT, VK_A, ID_ACCEL4}};
|
||||
static HACCEL hAcceleratorTable;
|
||||
static char Event[200];
|
||||
|
||||
LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
|
||||
int WINAPI
|
||||
WinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpszCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
WNDCLASS wc;
|
||||
MSG msg;
|
||||
HWND hWnd;
|
||||
|
||||
wc.lpszClassName = "AcceleratorTest";
|
||||
wc.lpfnWndProc = MainWndProc;
|
||||
wc.style = CS_VREDRAW | CS_HREDRAW;
|
||||
wc.hInstance = hInstance;
|
||||
wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION);
|
||||
wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
|
||||
wc.lpszMenuName = NULL;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
if (RegisterClass(&wc) == 0)
|
||||
{
|
||||
fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n",
|
||||
GetLastError());
|
||||
return(1);
|
||||
}
|
||||
|
||||
hWnd = CreateWindow("AcceleratorTest",
|
||||
"Accelerator Test",
|
||||
WS_OVERLAPPEDWINDOW,
|
||||
0,
|
||||
0,
|
||||
CW_USEDEFAULT,
|
||||
CW_USEDEFAULT,
|
||||
NULL,
|
||||
NULL,
|
||||
hInstance,
|
||||
NULL);
|
||||
if (hWnd == NULL)
|
||||
{
|
||||
fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n",
|
||||
GetLastError());
|
||||
return(1);
|
||||
}
|
||||
|
||||
/*tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE,
|
||||
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
|
||||
DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons");*/
|
||||
|
||||
Event[0] = 0;
|
||||
|
||||
ShowWindow(hWnd, nCmdShow);
|
||||
|
||||
hAcceleratorTable = CreateAcceleratorTable(Accelerators,
|
||||
sizeof(Accelerators)/sizeof(Accelerators[1]));
|
||||
if (hAcceleratorTable == NULL)
|
||||
{
|
||||
fprintf(stderr, "CreateAcceleratorTable failed (last error 0x%lX)\n",
|
||||
GetLastError());
|
||||
return(1);
|
||||
}
|
||||
|
||||
while(GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
if (!TranslateAccelerator(hWnd, hAcceleratorTable, &msg))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
if (!DestroyAcceleratorTable(hAcceleratorTable))
|
||||
{
|
||||
fprintf(stderr, "DestroyAcceleratorTable failed (last error 0x%lX)\n",
|
||||
GetLastError());
|
||||
return(1);
|
||||
}
|
||||
|
||||
//DeleteObject(tf);
|
||||
|
||||
return msg.wParam;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HDC hDC;
|
||||
char buf[200];
|
||||
|
||||
switch(msg)
|
||||
{
|
||||
case WM_PAINT:
|
||||
hDC = BeginPaint(hWnd, &ps);
|
||||
//SelectObject(hDC, tf);
|
||||
sprintf(buf, "Event: '%s'", Event);
|
||||
TextOut(hDC, 10, 10, buf, strlen(buf));
|
||||
EndPaint(hWnd, &ps);
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
case WM_COMMAND:
|
||||
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case ID_ACCEL1:
|
||||
strcpy(Event, "A");
|
||||
break;
|
||||
|
||||
case ID_ACCEL2:
|
||||
strcpy(Event, "SHIFT+A");
|
||||
break;
|
||||
|
||||
case ID_ACCEL3:
|
||||
strcpy(Event, "CTRL+A");
|
||||
break;
|
||||
|
||||
case ID_ACCEL4:
|
||||
strcpy(Event, "ALT+A");
|
||||
break;
|
||||
|
||||
default:
|
||||
sprintf(Event, "%d", LOWORD(wParam));
|
||||
break;
|
||||
}
|
||||
|
||||
InvalidateRect(hWnd, NULL, TRUE);
|
||||
UpdateWindow(hWnd);
|
||||
break;
|
||||
|
||||
default:
|
||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
return 0;
|
||||
}
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,127 +0,0 @@
|
||||
/*
|
||||
* Unit tests for crypt functions
|
||||
*
|
||||
* Copyright (c) 2004 Michael Jung
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "wine/test.h"
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "wincrypt.h"
|
||||
#include "winerror.h"
|
||||
|
||||
static const char szRsaBaseProv[] = MS_DEF_PROV_A;
|
||||
static const char szNonExistentProv[] = "Wine Non Existent Cryptographic Provider v11.2";
|
||||
static const char szKeySet[] = "wine_test_keyset";
|
||||
static const char szBadKeySet[] = "wine_test_bad_keyset";
|
||||
#define NON_DEF_PROV_TYPE 999
|
||||
|
||||
static void init_environment(void)
|
||||
{
|
||||
HCRYPTPROV hProv;
|
||||
|
||||
/* Ensure that container "wine_test_keyset" does exist */
|
||||
if (!CryptAcquireContext(&hProv, szKeySet, szRsaBaseProv, PROV_RSA_FULL, 0))
|
||||
{
|
||||
CryptAcquireContext(&hProv, szKeySet, szRsaBaseProv, PROV_RSA_FULL, CRYPT_NEWKEYSET);
|
||||
}
|
||||
CryptReleaseContext(hProv, 0);
|
||||
|
||||
/* Ensure that container "wine_test_keyset" does exist in default PROV_RSA_FULL type provider */
|
||||
if (!CryptAcquireContext(&hProv, szKeySet, NULL, PROV_RSA_FULL, 0))
|
||||
{
|
||||
CryptAcquireContext(&hProv, szKeySet, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET);
|
||||
}
|
||||
CryptReleaseContext(hProv, 0);
|
||||
|
||||
/* Ensure that container "wine_test_bad_keyset" does not exist. */
|
||||
if (CryptAcquireContext(&hProv, szBadKeySet, szRsaBaseProv, PROV_RSA_FULL, 0))
|
||||
{
|
||||
CryptReleaseContext(hProv, 0);
|
||||
CryptAcquireContext(&hProv, szBadKeySet, szRsaBaseProv, PROV_RSA_FULL, CRYPT_DELETEKEYSET);
|
||||
}
|
||||
}
|
||||
|
||||
static void clean_up_environment(void)
|
||||
{
|
||||
HCRYPTPROV hProv;
|
||||
|
||||
/* Remove container "wine_test_keyset" */
|
||||
if (CryptAcquireContext(&hProv, szKeySet, szRsaBaseProv, PROV_RSA_FULL, 0))
|
||||
{
|
||||
CryptReleaseContext(hProv, 0);
|
||||
CryptAcquireContext(&hProv, szKeySet, szRsaBaseProv, PROV_RSA_FULL, CRYPT_DELETEKEYSET);
|
||||
}
|
||||
|
||||
/* Remove container "wine_test_keyset" from default PROV_RSA_FULL type provider */
|
||||
if (CryptAcquireContext(&hProv, szKeySet, NULL, PROV_RSA_FULL, 0))
|
||||
{
|
||||
CryptReleaseContext(hProv, 0);
|
||||
CryptAcquireContext(&hProv, szKeySet, NULL, PROV_RSA_FULL, CRYPT_DELETEKEYSET);
|
||||
}
|
||||
}
|
||||
|
||||
static void test_acquire_context(void)
|
||||
{
|
||||
BOOL result;
|
||||
HCRYPTPROV hProv;
|
||||
|
||||
/* Provoke all kinds of error conditions (which are easy to provoke).
|
||||
* The order of the error tests seems to match Windows XP's rsaenh.dll CSP,
|
||||
* but since this is likely to change between CSP versions, we don't check
|
||||
* this. Please don't change the order of tests. */
|
||||
result = CryptAcquireContext(&hProv, NULL, NULL, 0, 0);
|
||||
ok(!result && GetLastError()==NTE_BAD_PROV_TYPE, "%08x\n", (unsigned int)GetLastError());
|
||||
|
||||
result = CryptAcquireContext(&hProv, NULL, NULL, 1000, 0);
|
||||
ok(!result && GetLastError()==NTE_BAD_PROV_TYPE, "%08x\n", (unsigned int)GetLastError());
|
||||
|
||||
result = CryptAcquireContext(&hProv, NULL, NULL, NON_DEF_PROV_TYPE, 0);
|
||||
ok(!result && GetLastError()==NTE_PROV_TYPE_NOT_DEF, "%08x\n", (unsigned int)GetLastError());
|
||||
|
||||
result = CryptAcquireContext(&hProv, szKeySet, szNonExistentProv, PROV_RSA_FULL, 0);
|
||||
ok(!result && GetLastError()==NTE_KEYSET_NOT_DEF, "%08x\n", (unsigned int)GetLastError());
|
||||
|
||||
result = CryptAcquireContext(&hProv, szKeySet, szRsaBaseProv, NON_DEF_PROV_TYPE, 0);
|
||||
ok(!result && GetLastError()==NTE_PROV_TYPE_NO_MATCH, "%08x\n", (unsigned int)GetLastError());
|
||||
|
||||
result = CryptAcquireContext(NULL, szKeySet, szRsaBaseProv, PROV_RSA_FULL, 0);
|
||||
ok(!result && GetLastError()==ERROR_INVALID_PARAMETER, "%08x\n", (unsigned int)GetLastError());
|
||||
|
||||
/* Last not least, try to really acquire a context. */
|
||||
result = CryptAcquireContext(&hProv, szKeySet, szRsaBaseProv, PROV_RSA_FULL, 0);
|
||||
ok(result, "%08x\n", (unsigned int)GetLastError());
|
||||
|
||||
if (GetLastError() == ERROR_SUCCESS)
|
||||
CryptReleaseContext(hProv, 0);
|
||||
|
||||
/* Try again, witch an empty ("\0") szProvider parameter */
|
||||
result = CryptAcquireContext(&hProv, szKeySet, "", PROV_RSA_FULL, 0);
|
||||
ok(result, "%08x\n", (unsigned int)GetLastError());
|
||||
|
||||
if (GetLastError() == ERROR_SUCCESS)
|
||||
CryptReleaseContext(hProv, 0);
|
||||
}
|
||||
|
||||
START_TEST(crypt)
|
||||
{
|
||||
init_environment();
|
||||
test_acquire_context();
|
||||
clean_up_environment();
|
||||
}
|
@@ -1,26 +0,0 @@
|
||||
# $Id: makefile,v 1.1 2004/08/07 22:51:27 sedwards Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = console
|
||||
|
||||
# require os code to explicitly request A/W version of structs/functions
|
||||
TARGET_CFLAGS += -D_DISABLE_TIDENTS -D__USE_W32API
|
||||
|
||||
TARGET_NAME = advapi32_test
|
||||
|
||||
TARGET_SDKLIBS = advapi32.a
|
||||
|
||||
TARGET_OBJECTS = \
|
||||
testlist.o \
|
||||
registry.o
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -1,237 +0,0 @@
|
||||
/*
|
||||
* Unit tests for registry functions
|
||||
*
|
||||
* Copyright (c) 2002 Alexandre Julliard
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdarg.h>
|
||||
#include "wine/test.h"
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winreg.h"
|
||||
#include "winerror.h"
|
||||
|
||||
static HKEY hkey_main;
|
||||
|
||||
/* delete key and all its subkeys */
|
||||
static DWORD delete_key( HKEY hkey )
|
||||
{
|
||||
char name[MAX_PATH];
|
||||
DWORD ret;
|
||||
|
||||
while (!(ret = RegEnumKeyA(hkey, 0, name, sizeof(name))))
|
||||
{
|
||||
HKEY tmp;
|
||||
if (!(ret = RegOpenKeyExA( hkey, name, 0, KEY_ENUMERATE_SUB_KEYS, &tmp )))
|
||||
{
|
||||
ret = delete_key( tmp );
|
||||
RegCloseKey( tmp );
|
||||
}
|
||||
if (ret) break;
|
||||
}
|
||||
if (ret != ERROR_NO_MORE_ITEMS) return ret;
|
||||
RegDeleteKeyA( hkey, NULL );
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void setup_main_key(void)
|
||||
{
|
||||
if (RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\Test", &hkey_main )) delete_key( hkey_main );
|
||||
|
||||
assert (!RegCreateKeyExA( HKEY_CURRENT_USER, "Software\\Wine\\Test", 0, NULL,
|
||||
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey_main, NULL ));
|
||||
}
|
||||
|
||||
static void test_enum_value(void)
|
||||
{
|
||||
DWORD res;
|
||||
char value[20], data[20];
|
||||
WCHAR valueW[20], dataW[20];
|
||||
DWORD val_count, data_count, type;
|
||||
static const WCHAR foobarW[] = {'f','o','o','b','a','r',0};
|
||||
static const WCHAR testW[] = {'T','e','s','t',0};
|
||||
static const WCHAR xxxW[] = {'x','x','x','x','x','x','x','x',0};
|
||||
|
||||
/* check NULL data with zero length */
|
||||
res = RegSetValueExA( hkey_main, "Test", 0, REG_SZ, NULL, 0 );
|
||||
if (GetVersion() & 0x80000000)
|
||||
ok( res == ERROR_INVALID_PARAMETER, "RegSetValueExA returned %ld\n", res );
|
||||
else
|
||||
ok( !res, "RegSetValueExA returned %ld\n", res );
|
||||
res = RegSetValueExA( hkey_main, "Test", 0, REG_EXPAND_SZ, NULL, 0 );
|
||||
ok( !res, "RegSetValueExA returned %ld\n", res );
|
||||
res = RegSetValueExA( hkey_main, "Test", 0, REG_BINARY, NULL, 0 );
|
||||
ok( !res, "RegSetValueExA returned %ld\n", res );
|
||||
|
||||
res = RegSetValueExA( hkey_main, "Test", 0, REG_SZ, (BYTE *)"foobar", 7 );
|
||||
ok( res == 0, "RegSetValueExA failed error %ld\n", res );
|
||||
|
||||
/* overflow both name and data */
|
||||
val_count = 2;
|
||||
data_count = 2;
|
||||
type = 1234;
|
||||
strcpy( value, "xxxxxxxxxx" );
|
||||
strcpy( data, "xxxxxxxxxx" );
|
||||
res = RegEnumValueA( hkey_main, 0, value, &val_count, NULL, &type, data, &data_count );
|
||||
ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res );
|
||||
ok( val_count == 2, "val_count set to %ld\n", val_count );
|
||||
ok( data_count == 7, "data_count set to %ld instead of 7\n", data_count );
|
||||
ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
|
||||
ok( !strcmp( value, "xxxxxxxxxx" ), "value set to '%s'\n", value );
|
||||
ok( !strcmp( data, "xxxxxxxxxx" ), "data set to '%s'\n", data );
|
||||
|
||||
/* overflow name */
|
||||
val_count = 3;
|
||||
data_count = 20;
|
||||
type = 1234;
|
||||
strcpy( value, "xxxxxxxxxx" );
|
||||
strcpy( data, "xxxxxxxxxx" );
|
||||
res = RegEnumValueA( hkey_main, 0, value, &val_count, NULL, &type, data, &data_count );
|
||||
ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res );
|
||||
/* Win9x returns 2 as specified by MSDN but NT returns 3... */
|
||||
ok( val_count == 2 || val_count == 3, "val_count set to %ld\n", val_count );
|
||||
ok( data_count == 7, "data_count set to %ld instead of 7\n", data_count );
|
||||
ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
|
||||
#if 0
|
||||
/* v5.1.2600.0 (XP Home) does not touch value or data in this case */
|
||||
ok( !strcmp( value, "Te" ), "value set to '%s' instead of 'Te'\n", value );
|
||||
ok( !strcmp( data, "foobar" ), "data set to '%s' instead of 'foobar'\n", data );
|
||||
#endif
|
||||
|
||||
/* overflow empty name */
|
||||
val_count = 0;
|
||||
data_count = 20;
|
||||
type = 1234;
|
||||
strcpy( value, "xxxxxxxxxx" );
|
||||
strcpy( data, "xxxxxxxxxx" );
|
||||
res = RegEnumValueA( hkey_main, 0, value, &val_count, NULL, &type, data, &data_count );
|
||||
ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res );
|
||||
ok( val_count == 0, "val_count set to %ld\n", val_count );
|
||||
ok( data_count == 7, "data_count set to %ld instead of 7\n", data_count );
|
||||
ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
|
||||
ok( !strcmp( value, "xxxxxxxxxx" ), "value set to '%s'\n", value );
|
||||
#if 0
|
||||
/* v5.1.2600.0 (XP Home) does not touch data in this case */
|
||||
ok( !strcmp( data, "foobar" ), "data set to '%s' instead of 'foobar'\n", data );
|
||||
#endif
|
||||
|
||||
/* overflow data */
|
||||
val_count = 20;
|
||||
data_count = 2;
|
||||
type = 1234;
|
||||
strcpy( value, "xxxxxxxxxx" );
|
||||
strcpy( data, "xxxxxxxxxx" );
|
||||
res = RegEnumValueA( hkey_main, 0, value, &val_count, NULL, &type, data, &data_count );
|
||||
ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res );
|
||||
ok( val_count == 20, "val_count set to %ld\n", val_count );
|
||||
ok( data_count == 7, "data_count set to %ld instead of 7\n", data_count );
|
||||
ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
|
||||
ok( !strcmp( value, "xxxxxxxxxx" ), "value set to '%s'\n", value );
|
||||
ok( !strcmp( data, "xxxxxxxxxx" ), "data set to '%s'\n", data );
|
||||
|
||||
/* no overflow */
|
||||
val_count = 20;
|
||||
data_count = 20;
|
||||
type = 1234;
|
||||
strcpy( value, "xxxxxxxxxx" );
|
||||
strcpy( data, "xxxxxxxxxx" );
|
||||
res = RegEnumValueA( hkey_main, 0, value, &val_count, NULL, &type, data, &data_count );
|
||||
ok( res == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", res );
|
||||
ok( val_count == 4, "val_count set to %ld instead of 4\n", val_count );
|
||||
ok( data_count == 7, "data_count set to %ld instead of 7\n", data_count );
|
||||
ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
|
||||
ok( !strcmp( value, "Test" ), "value is '%s' instead of Test\n", value );
|
||||
ok( !strcmp( data, "foobar" ), "data is '%s' instead of foobar\n", data );
|
||||
|
||||
/* Unicode tests */
|
||||
|
||||
SetLastError(0);
|
||||
res = RegSetValueExW( hkey_main, testW, 0, REG_SZ, (BYTE *)foobarW, 7*sizeof(WCHAR) );
|
||||
if (res==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
|
||||
goto CLEANUP;
|
||||
ok( res == 0, "RegSetValueExW failed error %ld\n", res );
|
||||
|
||||
/* overflow both name and data */
|
||||
val_count = 2;
|
||||
data_count = 2;
|
||||
type = 1234;
|
||||
memcpy( valueW, xxxW, sizeof(xxxW) );
|
||||
memcpy( dataW, xxxW, sizeof(xxxW) );
|
||||
res = RegEnumValueW( hkey_main, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count );
|
||||
ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res );
|
||||
ok( val_count == 2, "val_count set to %ld\n", val_count );
|
||||
ok( data_count == 7*sizeof(WCHAR), "data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
|
||||
ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
|
||||
ok( !memcmp( valueW, xxxW, sizeof(xxxW) ), "value modified\n" );
|
||||
ok( !memcmp( dataW, xxxW, sizeof(xxxW) ), "data modified\n" );
|
||||
|
||||
/* overflow name */
|
||||
val_count = 3;
|
||||
data_count = 20;
|
||||
type = 1234;
|
||||
memcpy( valueW, xxxW, sizeof(xxxW) );
|
||||
memcpy( dataW, xxxW, sizeof(xxxW) );
|
||||
res = RegEnumValueW( hkey_main, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count );
|
||||
ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res );
|
||||
ok( val_count == 3, "val_count set to %ld\n", val_count );
|
||||
ok( data_count == 7*sizeof(WCHAR), "data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
|
||||
ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
|
||||
ok( !memcmp( valueW, xxxW, sizeof(xxxW) ), "value modified\n" );
|
||||
ok( !memcmp( dataW, xxxW, sizeof(xxxW) ), "data modified\n" );
|
||||
|
||||
/* overflow data */
|
||||
val_count = 20;
|
||||
data_count = 2;
|
||||
type = 1234;
|
||||
memcpy( valueW, xxxW, sizeof(xxxW) );
|
||||
memcpy( dataW, xxxW, sizeof(xxxW) );
|
||||
res = RegEnumValueW( hkey_main, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count );
|
||||
ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res );
|
||||
ok( val_count == 4, "val_count set to %ld instead of 4\n", val_count );
|
||||
ok( data_count == 7*sizeof(WCHAR), "data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
|
||||
ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
|
||||
ok( !memcmp( valueW, testW, sizeof(testW) ), "value is not 'Test'\n" );
|
||||
ok( !memcmp( dataW, xxxW, sizeof(xxxW) ), "data modified\n" );
|
||||
|
||||
/* no overflow */
|
||||
val_count = 20;
|
||||
data_count = 20;
|
||||
type = 1234;
|
||||
memcpy( valueW, xxxW, sizeof(xxxW) );
|
||||
memcpy( dataW, xxxW, sizeof(xxxW) );
|
||||
res = RegEnumValueW( hkey_main, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count );
|
||||
ok( res == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", res );
|
||||
ok( val_count == 4, "val_count set to %ld instead of 4\n", val_count );
|
||||
ok( data_count == 7*sizeof(WCHAR), "data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
|
||||
ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
|
||||
ok( !memcmp( valueW, testW, sizeof(testW) ), "value is not 'Test'\n" );
|
||||
ok( !memcmp( dataW, foobarW, sizeof(foobarW) ), "data is not 'foobar'\n" );
|
||||
|
||||
CLEANUP:
|
||||
/* cleanup */
|
||||
RegDeleteValueA( hkey_main, "Test" );
|
||||
}
|
||||
|
||||
START_TEST(registry)
|
||||
{
|
||||
setup_main_key();
|
||||
test_enum_value();
|
||||
|
||||
/* cleanup */
|
||||
delete_key( hkey_main );
|
||||
}
|
@@ -1,25 +0,0 @@
|
||||
/* Automatically generated file; DO NOT EDIT!! */
|
||||
|
||||
/* stdarg.h is needed for Winelib */
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
|
||||
extern void func_registry(void);
|
||||
|
||||
struct test
|
||||
{
|
||||
const char *name;
|
||||
void (*func)(void);
|
||||
};
|
||||
|
||||
static const struct test winetest_testlist[] =
|
||||
{
|
||||
{ "registry", func_registry },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
#define WINETEST_WANT_MAIN
|
||||
#include "wine/test.h"
|
@@ -3,4 +3,3 @@
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# $Id: Makefile,v 1.7 2003/11/14 17:13:14 weiden Exp $
|
||||
# $Id: Makefile,v 1.6 2002/06/02 19:24:57 chorns Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
@@ -14,8 +14,6 @@ TARGET_SDKLIBS = kernel32.a user32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,213 +0,0 @@
|
||||
#include <windows.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifndef AC_SRC_ALPHA
|
||||
#define AC_SRC_ALPHA (0x1)
|
||||
#endif
|
||||
|
||||
HINSTANCE HInst;
|
||||
const char* WndClassName = "GMainWnd";
|
||||
LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam,
|
||||
LPARAM LParam);
|
||||
|
||||
WINBOOL
|
||||
STDCALL
|
||||
GdiAlphaBlend(HDC hdcDst,LONG DstX,LONG DstY,LONG DstCx,LONG DstCy,HDC hdcSrc,LONG SrcX,LONG SrcY,LONG SrcCx,LONG SrcCy,BLENDFUNCTION BlendFunction);
|
||||
|
||||
|
||||
int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance,
|
||||
LPTSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
WNDCLASS wc;
|
||||
MSG msg;
|
||||
|
||||
HInst = HInstance;
|
||||
|
||||
memset(&wc, 0, sizeof(WNDCLASS));
|
||||
|
||||
wc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
|
||||
wc.lpfnWndProc = MainWndProc;
|
||||
wc.hInstance = HInstance;
|
||||
wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW);
|
||||
/* wc.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BTNFACE + 1); */
|
||||
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
|
||||
wc.lpszClassName = WndClassName;
|
||||
|
||||
if (RegisterClass(&wc))
|
||||
{
|
||||
HWND HWnd =
|
||||
CreateWindow(
|
||||
WndClassName, TEXT("AlphaBlend Rendering Demo"),
|
||||
WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION |
|
||||
WS_VISIBLE | WS_CLIPSIBLINGS,
|
||||
0, 0, 320, 430,
|
||||
NULL, NULL, HInst, NULL
|
||||
);
|
||||
|
||||
if (HWnd)
|
||||
{
|
||||
ShowWindow(HWnd, nCmdShow);
|
||||
UpdateWindow(HWnd);
|
||||
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* image related */
|
||||
BITMAP bmp;
|
||||
LPCSTR filename = TEXT("lena.bmp");
|
||||
HDC HMemDC = NULL, HMemDC2 = NULL;
|
||||
HBITMAP HOldBmp = NULL;
|
||||
PVOID pBmpBits = NULL;
|
||||
HBITMAP H32BppBitmap = NULL;
|
||||
BITMAPINFO bmpi;
|
||||
|
||||
BOOL ConvertBitmapTo32Bpp(HDC hDC, BITMAP *bmp)
|
||||
{
|
||||
ZeroMemory(&bmpi, sizeof(BITMAPINFO));
|
||||
bmpi.bmiHeader.biSize = sizeof(BITMAPINFO);
|
||||
bmpi.bmiHeader.biWidth = bmp->bmWidth;
|
||||
bmpi.bmiHeader.biHeight = bmp->bmHeight;
|
||||
bmpi.bmiHeader.biPlanes = 1;
|
||||
bmpi.bmiHeader.biBitCount = 32;
|
||||
bmpi.bmiHeader.biCompression = BI_RGB;
|
||||
bmpi.bmiHeader.biSizeImage = 4 * bmpi.bmiHeader.biWidth * bmpi.bmiHeader.biHeight;
|
||||
H32BppBitmap = CreateDIBSection(hDC, &bmpi, DIB_RGB_COLORS, &pBmpBits, 0, 0);
|
||||
if(H32BppBitmap)
|
||||
{
|
||||
HBITMAP bmpalpha;
|
||||
SelectObject(hDC, H32BppBitmap);
|
||||
BitBlt(hDC, 0, 0, bmp->bmWidth, bmp->bmHeight, HMemDC, 0, 0, SRCCOPY);
|
||||
|
||||
/* load and apply alpha channel */
|
||||
bmpalpha = LoadImage(HInst, TEXT("lenaalpha.bmp"), IMAGE_BITMAP,
|
||||
0, 0, LR_LOADFROMFILE);
|
||||
if(bmpalpha)
|
||||
{
|
||||
COLORREF *col = pBmpBits;
|
||||
int x, y;
|
||||
HDC hdcTemp = CreateCompatibleDC(NULL);
|
||||
if(!hdcTemp)
|
||||
{
|
||||
DeleteObject(bmpalpha);
|
||||
return FALSE;
|
||||
}
|
||||
SelectObject(hdcTemp, bmpalpha);
|
||||
|
||||
for(y = 0; y < bmp->bmHeight; y++)
|
||||
{
|
||||
for(x = 0; x < bmp->bmWidth; x++)
|
||||
{
|
||||
COLORREF Color = (COLORREF)GetRValue(GetPixel(hdcTemp, x, y)) << 24;
|
||||
*col++ |= Color;
|
||||
}
|
||||
}
|
||||
|
||||
DeleteObject(bmpalpha);
|
||||
DeleteDC(hdcTemp);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam,
|
||||
LPARAM LParam)
|
||||
{
|
||||
switch (Msg)
|
||||
{
|
||||
case WM_CREATE:
|
||||
{
|
||||
/* create a memory DC */
|
||||
HMemDC = CreateCompatibleDC(NULL);
|
||||
if (HMemDC)
|
||||
{
|
||||
/* load a bitmap from file */
|
||||
HBITMAP HBmp =
|
||||
/* static_cast<HBITMAP> */(
|
||||
LoadImage(HInst, filename, IMAGE_BITMAP,
|
||||
0, 0, LR_LOADFROMFILE)
|
||||
);
|
||||
if (HBmp)
|
||||
{
|
||||
/* extract dimensions of the bitmap */
|
||||
GetObject(HBmp, sizeof(BITMAP), &bmp);
|
||||
|
||||
/* associate the bitmap with the memory DC */
|
||||
/* HOldBmp = static_cast<HBITMAP> */
|
||||
(SelectObject(HMemDC, HBmp)
|
||||
);
|
||||
HMemDC2 = CreateCompatibleDC(NULL);
|
||||
if(!ConvertBitmapTo32Bpp(HMemDC2, &bmp))
|
||||
{
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
case WM_PAINT:
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
BLENDFUNCTION BlendFunc;
|
||||
HDC Hdc = BeginPaint(HWnd, &ps);
|
||||
#if 0
|
||||
try
|
||||
#endif
|
||||
{
|
||||
|
||||
BlendFunc.BlendOp = AC_SRC_OVER;
|
||||
BlendFunc.BlendFlags = 0;
|
||||
BlendFunc.SourceConstantAlpha = 128;
|
||||
BlendFunc.AlphaFormat = 0;
|
||||
|
||||
BitBlt(Hdc, 100, 90,
|
||||
bmp.bmWidth, bmp.bmHeight,
|
||||
HMemDC2, 0, 0,
|
||||
SRCCOPY);
|
||||
GdiAlphaBlend(Hdc, 0, 0, bmp.bmWidth, bmp.bmHeight,
|
||||
HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight,
|
||||
BlendFunc);
|
||||
GdiAlphaBlend(Hdc, bmp.bmWidth - 15, 10, bmp.bmWidth / 2, bmp.bmHeight / 2,
|
||||
HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight,
|
||||
BlendFunc);
|
||||
|
||||
BlendFunc.SourceConstantAlpha = 255;
|
||||
BlendFunc.AlphaFormat = AC_SRC_ALPHA;
|
||||
|
||||
GdiAlphaBlend(Hdc, 140, 200, bmp.bmWidth, bmp.bmHeight,
|
||||
HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight,
|
||||
BlendFunc);
|
||||
GdiAlphaBlend(Hdc, 20, 210, (bmp.bmWidth / 3) * 2, (bmp.bmHeight / 3) * 2,
|
||||
HMemDC2, 0, 0, bmp.bmWidth, bmp.bmHeight,
|
||||
BlendFunc);
|
||||
}
|
||||
#if 0
|
||||
catch (...)
|
||||
{
|
||||
EndPaint(HWnd, &ps);
|
||||
}
|
||||
#endif
|
||||
EndPaint(HWnd, &ps);
|
||||
break;
|
||||
}
|
||||
case WM_DESTROY:
|
||||
{
|
||||
/* clean up */
|
||||
DeleteObject(SelectObject(HMemDC, HOldBmp));
|
||||
DeleteDC(HMemDC);
|
||||
DeleteDC(HMemDC2);
|
||||
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return DefWindowProc(HWnd, Msg, WParam, LParam);
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 87 KiB |
Binary file not shown.
Before Width: | Height: | Size: 87 KiB |
@@ -1,22 +0,0 @@
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = windows
|
||||
|
||||
TARGET_NAME = alphablend
|
||||
|
||||
TARGET_SDKLIBS = kernel32.a gdi32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror -D__USE_W32API
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -3,4 +3,3 @@
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
||||
|
@@ -3,7 +3,6 @@
|
||||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
#include <ddk/ntddk.h>
|
||||
#include <rosrtl/string.h>
|
||||
|
||||
HANDLE OutputHandle;
|
||||
HANDLE InputHandle;
|
||||
@@ -16,18 +15,16 @@ ApcRoutine(PVOID Context,
|
||||
printf("(apc.exe) ApcRoutine(Context %p)\n", Context);
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
NTSTATUS Status;
|
||||
HANDLE FileHandle;
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
UNICODE_STRING FileName = ROS_STRING_INITIALIZER(L"\\C:\\a.txt");
|
||||
UNICODE_STRING FileName = UNICODE_STRING_INITIALIZER(L"\\C:\\a.txt");
|
||||
IO_STATUS_BLOCK IoStatus;
|
||||
CHAR Buffer[256];
|
||||
HANDLE EventHandle;
|
||||
LARGE_INTEGER off;
|
||||
|
||||
|
||||
AllocConsole();
|
||||
InputHandle = GetStdHandle(STD_INPUT_HANDLE);
|
||||
OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
@@ -59,30 +56,24 @@ int main(int argc, char* argv[])
|
||||
OPEN_EXISTING,
|
||||
FILE_FLAG_OVERLAPPED,
|
||||
NULL);
|
||||
|
||||
if (FileHandle == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
|
||||
printf("Open failed last err 0x%lu\n",GetLastError());
|
||||
printf("Open failed\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
off.QuadPart = 0;
|
||||
|
||||
printf("Reading file\n");
|
||||
Status = ZwReadFile(FileHandle,
|
||||
NULL,
|
||||
(PIO_APC_ROUTINE)ApcRoutine,
|
||||
(PVOID) 0xdeadbeef,
|
||||
(PVOID)0xdeadbeef,
|
||||
&IoStatus,
|
||||
Buffer,
|
||||
256,//len
|
||||
&off ,//offset must exist if file was opened for asynch. i/o aka. OVERLAPPED
|
||||
NULL);
|
||||
|
||||
256,
|
||||
NULL,
|
||||
NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
printf("Read failed status 0x%lu\n",Status);
|
||||
printf("Read failed\n");
|
||||
}
|
||||
printf("Waiting\n");
|
||||
WaitForSingleObjectEx(EventHandle, INFINITE, TRUE);
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# $Id: makefile,v 1.10 2003/11/14 17:13:14 weiden Exp $
|
||||
# $Id: makefile,v 1.9 2002/06/02 19:24:57 chorns Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
@@ -14,8 +14,6 @@ TARGET_SDKLIBS = ntdll.a kernel32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,53 +0,0 @@
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
|
||||
VOID CALLBACK TimerApcProc(
|
||||
LPVOID lpArg,
|
||||
DWORD dwTimerLowValue,
|
||||
DWORD dwTimerHighValue )
|
||||
{
|
||||
printf("APC Callback %lu\n", *(PDWORD)lpArg);
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
HANDLE hTimer;
|
||||
BOOL bSuccess;
|
||||
LARGE_INTEGER DueTime;
|
||||
DWORD value = 1;
|
||||
|
||||
hTimer = CreateWaitableTimer(NULL, FALSE, NULL );
|
||||
|
||||
if (!hTimer)
|
||||
{
|
||||
printf("CreateWaitableTimer failed!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
DueTime.QuadPart = -(LONGLONG)(5 * 10000000);
|
||||
|
||||
bSuccess = SetWaitableTimer(
|
||||
hTimer,
|
||||
&DueTime,
|
||||
2001 /*interval (using an odd number to be able to find it easy in kmode) */,
|
||||
TimerApcProc,
|
||||
&value /*callback argument*/,
|
||||
FALSE );
|
||||
|
||||
if (!bSuccess)
|
||||
{
|
||||
printf("SetWaitableTimer failed!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (;value <= 10; value++ )
|
||||
{
|
||||
SleepEx(INFINITE, TRUE /*alertable*/ );
|
||||
}
|
||||
|
||||
CloseHandle( hTimer );
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1,23 +0,0 @@
|
||||
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = console
|
||||
|
||||
TARGET_NAME = apc2
|
||||
|
||||
TARGET_SDKLIBS = ntdll.a kernel32.a
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -3,4 +3,3 @@
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# $Id: makefile,v 1.16 2003/11/14 17:13:14 weiden Exp $
|
||||
# $Id: makefile,v 1.15 2002/06/02 19:24:57 chorns Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
@@ -12,8 +12,6 @@ TARGET_NAME = args
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
@@ -3,4 +3,3 @@
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
||||
|
@@ -1,4 +1,5 @@
|
||||
# $Id: makefile,v 1.6 2003/11/14 17:13:15 weiden Exp $
|
||||
# $Id: makefile,v 1.5 2002/06/02 19:24:57 chorns Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
@@ -13,8 +14,6 @@ TARGET_SDKLIBS = ntdll.a kernel32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
@@ -3,4 +3,3 @@
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
||||
|
@@ -24,6 +24,7 @@ thread_main2(LPVOID param)
|
||||
|
||||
int main (void)
|
||||
{
|
||||
HANDLE hThread;
|
||||
DWORD i=0;
|
||||
DWORD id;
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# $Id: makefile,v 1.11 2003/11/14 17:13:15 weiden Exp $
|
||||
# $Id: makefile,v 1.10 2002/06/02 19:24:57 chorns Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
@@ -14,8 +14,6 @@ TARGET_SDKLIBS = kernel32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
@@ -3,4 +3,3 @@
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
||||
|
@@ -1,139 +0,0 @@
|
||||
|
||||
/*
|
||||
* Windows 2000 Graphics API Black Book
|
||||
* (BitBlt Bitmap Rendering Demo)
|
||||
*
|
||||
* Created by Damon Chandler <dmc27@ee.cornell.edu>
|
||||
* Updates can be downloaded at: <www.coriolis.com>
|
||||
*
|
||||
* Please do not hesistate to e-mail me at dmc27@ee.cornell.edu
|
||||
* if you have any questions about this code.
|
||||
*/
|
||||
|
||||
|
||||
#include <windows.h>
|
||||
#include <string.h>
|
||||
|
||||
HINSTANCE HInst;
|
||||
const char* WndClassName = "GMainWnd";
|
||||
LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam,
|
||||
LPARAM LParam);
|
||||
|
||||
|
||||
int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance,
|
||||
LPTSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
WNDCLASS wc;
|
||||
MSG msg;
|
||||
|
||||
HInst = HInstance;
|
||||
|
||||
memset(&wc, 0, sizeof(WNDCLASS));
|
||||
|
||||
wc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
|
||||
wc.lpfnWndProc = MainWndProc;
|
||||
wc.hInstance = HInstance;
|
||||
wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW);
|
||||
/* wc.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BTNFACE + 1); */
|
||||
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
|
||||
wc.lpszClassName = WndClassName;
|
||||
|
||||
if (RegisterClass(&wc))
|
||||
{
|
||||
HWND HWnd =
|
||||
CreateWindow(
|
||||
WndClassName, TEXT("BitBlt Bitmap Rendering Demo"),
|
||||
WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION |
|
||||
WS_VISIBLE | WS_CLIPSIBLINGS,
|
||||
0, 0, 220, 230,
|
||||
NULL, NULL, HInst, NULL
|
||||
);
|
||||
|
||||
if (HWnd)
|
||||
{
|
||||
ShowWindow(HWnd, nCmdShow);
|
||||
UpdateWindow(HWnd);
|
||||
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* image related */
|
||||
BITMAP bmp;
|
||||
LPCSTR filename = TEXT("lena.bmp");
|
||||
HDC HMemDC = NULL;
|
||||
HBITMAP HOldBmp = NULL;
|
||||
|
||||
LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam,
|
||||
LPARAM LParam)
|
||||
{
|
||||
switch (Msg)
|
||||
{
|
||||
case WM_CREATE:
|
||||
{
|
||||
/* create a memory DC */
|
||||
HMemDC = CreateCompatibleDC(NULL);
|
||||
if (HMemDC)
|
||||
{
|
||||
/* load a bitmap from file */
|
||||
HBITMAP HBmp =
|
||||
/* static_cast<HBITMAP> */(
|
||||
LoadImage(HInst, filename, IMAGE_BITMAP,
|
||||
0, 0, LR_LOADFROMFILE)
|
||||
);
|
||||
if (HBmp)
|
||||
{
|
||||
/* extract dimensions of the bitmap */
|
||||
GetObject(HBmp, sizeof(BITMAP), &bmp);
|
||||
|
||||
/* associate the bitmap with the memory DC */
|
||||
/* HOldBmp = static_cast<HBITMAP> */
|
||||
(SelectObject(HMemDC, HBmp)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
case WM_PAINT:
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
const HDC Hdc = BeginPaint(HWnd, &ps);
|
||||
#if 0
|
||||
try
|
||||
#endif
|
||||
{
|
||||
|
||||
/* TODO: add palette support (see Chapter 9)... */
|
||||
|
||||
|
||||
BitBlt(Hdc, 20, 15,
|
||||
bmp.bmWidth, bmp.bmHeight,
|
||||
HMemDC, 0, 0,
|
||||
SRCCOPY);
|
||||
}
|
||||
#if 0
|
||||
catch (...)
|
||||
#endif
|
||||
{
|
||||
EndPaint(HWnd, &ps);
|
||||
}
|
||||
EndPaint(HWnd, &ps);
|
||||
break;
|
||||
}
|
||||
case WM_DESTROY:
|
||||
{
|
||||
/* clean up */
|
||||
DeleteObject(SelectObject(HMemDC, HOldBmp));
|
||||
DeleteDC(HMemDC);
|
||||
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return DefWindowProc(HWnd, Msg, WParam, LParam);
|
||||
}
|
142
reactos/apps/tests/bitblt/bitblt.cpp
Normal file
142
reactos/apps/tests/bitblt/bitblt.cpp
Normal file
@@ -0,0 +1,142 @@
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// Windows 2000 Graphics API Black Book
|
||||
// Chapter 1 - Listing 1.3 (BitBlt Bitmap Rendering Demo)
|
||||
//
|
||||
// Created by Damon Chandler <dmc27@ee.cornell.edu>
|
||||
// Updates can be downloaded at: <www.coriolis.com>
|
||||
//
|
||||
// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu
|
||||
// if you have any questions about this code.
|
||||
// ------------------------------------------------------------------
|
||||
|
||||
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
#include <windows.h>
|
||||
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
|
||||
|
||||
HINSTANCE HInst;
|
||||
const char* WndClassName = "GMainWnd";
|
||||
LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam,
|
||||
LPARAM LParam);
|
||||
|
||||
|
||||
int APIENTRY WinMain(HINSTANCE HInstance, HINSTANCE HPrevInstance,
|
||||
LPTSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
HInst = HInstance;
|
||||
|
||||
WNDCLASS wc;
|
||||
memset(&wc, 0, sizeof(WNDCLASS));
|
||||
|
||||
wc.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
|
||||
wc.lpfnWndProc = MainWndProc;
|
||||
wc.hInstance = HInstance;
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wc.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BTNFACE + 1);
|
||||
wc.lpszClassName = WndClassName;
|
||||
|
||||
if (RegisterClass(&wc))
|
||||
{
|
||||
HWND HWnd =
|
||||
CreateWindow(
|
||||
WndClassName, TEXT("BitBlt Bitmap Rendering Demo"),
|
||||
WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION |
|
||||
WS_VISIBLE | WS_CLIPSIBLINGS,
|
||||
0, 0, 220, 230,
|
||||
NULL, NULL, HInst, NULL
|
||||
);
|
||||
|
||||
if (HWnd)
|
||||
{
|
||||
ShowWindow(HWnd, nCmdShow);
|
||||
UpdateWindow(HWnd);
|
||||
|
||||
MSG msg;
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//------------------------------------------------------------------
|
||||
|
||||
|
||||
// image related
|
||||
BITMAP bmp;
|
||||
LPCSTR filename = TEXT("lena.bmp");
|
||||
HDC HMemDC = NULL;
|
||||
HBITMAP HOldBmp = NULL;
|
||||
|
||||
LRESULT CALLBACK MainWndProc(HWND HWnd, UINT Msg, WPARAM WParam,
|
||||
LPARAM LParam)
|
||||
{
|
||||
switch (Msg)
|
||||
{
|
||||
case WM_CREATE:
|
||||
{
|
||||
// create a memory DC
|
||||
HMemDC = CreateCompatibleDC(NULL);
|
||||
if (HMemDC)
|
||||
{
|
||||
// load a bitmap from file
|
||||
HBITMAP HBmp =
|
||||
static_cast<HBITMAP>(
|
||||
LoadImage(HInst, filename, IMAGE_BITMAP,
|
||||
0, 0, LR_LOADFROMFILE)
|
||||
);
|
||||
if (HBmp)
|
||||
{
|
||||
// extract dimensions of the bitmap
|
||||
GetObject(HBmp, sizeof(BITMAP), &bmp);
|
||||
|
||||
// associate the bitmap with the memory DC
|
||||
HOldBmp = static_cast<HBITMAP>(
|
||||
SelectObject(HMemDC, HBmp)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
case WM_PAINT:
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
const HDC Hdc = BeginPaint(HWnd, &ps);
|
||||
#if 0
|
||||
try
|
||||
#endif
|
||||
{
|
||||
//
|
||||
// TODO: add palette support (see Chapter 9)...
|
||||
//
|
||||
|
||||
BitBlt(Hdc, 20, 15,
|
||||
bmp.bmWidth, bmp.bmHeight,
|
||||
HMemDC, 0, 0,
|
||||
SRCCOPY);
|
||||
}
|
||||
#if 0
|
||||
catch (...)
|
||||
#endif
|
||||
{
|
||||
EndPaint(HWnd, &ps);
|
||||
}
|
||||
EndPaint(HWnd, &ps);
|
||||
break;
|
||||
}
|
||||
case WM_DESTROY:
|
||||
{
|
||||
// clean up
|
||||
DeleteObject(SelectObject(HMemDC, HOldBmp));
|
||||
DeleteDC(HMemDC);
|
||||
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return DefWindowProc(HWnd, Msg, WParam, LParam);
|
||||
}
|
||||
//------------------------------------------------------------------
|
@@ -1,22 +1,66 @@
|
||||
# Makefile - Proj_Listing1_5.dsp
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
ifndef CFG
|
||||
CFG=Proj_Listing1_5 - Win32 Debug
|
||||
endif
|
||||
CC=gcc
|
||||
CFLAGS=
|
||||
CXX=g++
|
||||
CXXFLAGS=$(CFLAGS)
|
||||
RC=windres -O COFF
|
||||
ifeq "$(CFG)" "Proj_Listing1_5 - Win32 Release"
|
||||
CFLAGS+=-fexceptions -O2 -DWIN32 -DNDEBUG -D_WINDOWS -D_MBCS -W
|
||||
LD=$(CXX) $(CXXFLAGS)
|
||||
LDFLAGS=
|
||||
LDFLAGS+=-Wl,--subsystem,windows
|
||||
LIBS+=-lkernel32 -luser32 -lgdi32
|
||||
else
|
||||
ifeq "$(CFG)" "Proj_Listing1_5 - Win32 Debug"
|
||||
CFLAGS+=-fexceptions -g -O0 -DWIN32 -D_DEBUG -D_WINDOWS -D_MBCS -W
|
||||
LD=$(CXX) $(CXXFLAGS)
|
||||
LDFLAGS=
|
||||
LDFLAGS+=-Wl,--subsystem,windows
|
||||
LIBS+=-lkernel32 -luser32 -lgdi32
|
||||
endif
|
||||
endif
|
||||
|
||||
TARGET_NORC = yes
|
||||
ifndef TARGET
|
||||
TARGET=bitblt.exe
|
||||
endif
|
||||
|
||||
TARGET_TYPE = program
|
||||
.PHONY: all
|
||||
all: $(TARGET)
|
||||
|
||||
TARGET_APPTYPE = windows
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||
|
||||
TARGET_NAME = bitblt
|
||||
%.o: %.cpp
|
||||
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $@ -c $<
|
||||
|
||||
TARGET_SDKLIBS = kernel32.a gdi32.a
|
||||
%.res: %.rc
|
||||
$(RC) $(CPPFLAGS) -o $@ -i $<
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
SOURCE_FILES= \
|
||||
bitblt.cpp
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror -D__USE_W32API
|
||||
HEADER_FILES=
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
RESOURCE_FILES=
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
SRCS=$(SOURCE_FILES) $(HEADER_FILES) $(RESOURCE_FILES)
|
||||
|
||||
OBJS=$(patsubst %.rc,%.res,$(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.rc,$(SRCS)))))
|
||||
|
||||
$(TARGET): $(OBJS)
|
||||
$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
-del $(OBJS) $(TARGET)
|
||||
|
||||
.PHONY: depends
|
||||
depends:
|
||||
-$(CXX) $(CXXFLAGS) $(CPPFLAGS) -MM $(filter %.c %.cpp,$(SRCS)) > Proj_Listing1_5.dep
|
||||
|
||||
-include Proj_Listing1_5.dep
|
||||
|
||||
# EOF
|
||||
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,22 +0,0 @@
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = windows
|
||||
|
||||
TARGET_NAME = btntest
|
||||
|
||||
TARGET_SDKLIBS = kernel32.a gdi32.a
|
||||
|
||||
TARGET_OBJECTS = buttontst.o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -1,107 +0,0 @@
|
||||
/* Based on Radoslaw Sokol's static control test. */
|
||||
#include <windows.h>
|
||||
|
||||
static LPSTR BUTTON_CLASS = "BUTTON";
|
||||
static LPSTR TEST_WND_CLASS = "TESTWND";
|
||||
|
||||
#ifdef NDEBUG
|
||||
#define DPRINT(s) (void)0
|
||||
#else
|
||||
#define DPRINT(s) OutputDebugStringA("BUTTONTEST: " s "\n")
|
||||
#endif
|
||||
|
||||
HINSTANCE AppInstance = NULL;
|
||||
|
||||
LRESULT WmCreate(
|
||||
HWND Wnd)
|
||||
{
|
||||
DPRINT("WM_CREATE (enter).");
|
||||
DPRINT("test 1");
|
||||
CreateWindowEx(0, BUTTON_CLASS, "PushButton", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,
|
||||
10, 10, 150, 30, Wnd, NULL, AppInstance, NULL);
|
||||
DPRINT("test 2");
|
||||
CreateWindowEx(0, BUTTON_CLASS, "DefPushButton", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE,
|
||||
10, 40, 150, 30, Wnd, NULL, AppInstance, NULL);
|
||||
DPRINT("test 3");
|
||||
CreateWindowEx(0, BUTTON_CLASS, "AutoRadioButton", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE,
|
||||
10, 70, 150, 30, Wnd, NULL, AppInstance, NULL);
|
||||
DPRINT("test 4");
|
||||
CreateWindowEx(0, BUTTON_CLASS, "AutoCheckBox", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE,
|
||||
10, 100, 150, 30, Wnd, NULL, AppInstance, NULL);
|
||||
|
||||
DPRINT("WM_CREATE (leave).");
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK TestWndProc(
|
||||
HWND Wnd,
|
||||
UINT Msg,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam)
|
||||
{
|
||||
switch (Msg) {
|
||||
case WM_CREATE:
|
||||
return WmCreate(Wnd);
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
default:
|
||||
return DefWindowProc(Wnd, Msg, wParam, lParam);
|
||||
}
|
||||
}
|
||||
|
||||
int STDCALL WinMain(
|
||||
HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpCmdLine,
|
||||
int nShowCmd)
|
||||
{
|
||||
ATOM Result;
|
||||
MSG Msg;
|
||||
HWND MainWindow;
|
||||
WNDCLASSEX TestWndClass = {0};
|
||||
DPRINT("Application starting up.");
|
||||
// Remember instance handle.
|
||||
AppInstance = GetModuleHandle(NULL);
|
||||
// Register test window class.
|
||||
TestWndClass.cbSize = sizeof(WNDCLASSEX);
|
||||
TestWndClass.lpfnWndProc = &TestWndProc;
|
||||
TestWndClass.hInstance = AppInstance;
|
||||
TestWndClass.hCursor = LoadCursor(0, (LPCTSTR)IDC_ARROW);
|
||||
TestWndClass.hbrBackground = CreateSolidBrush(RGB(255,255,230));
|
||||
TestWndClass.lpszClassName = TEST_WND_CLASS;
|
||||
Result = RegisterClassEx(&TestWndClass);
|
||||
if (Result == 0) {
|
||||
DPRINT("Error registering class.");
|
||||
MessageBox(0, "Error registering test window class.",
|
||||
"Button control test", MB_ICONSTOP | MB_OK);
|
||||
ExitProcess(0);
|
||||
}
|
||||
// Create main window.
|
||||
DPRINT("Creating main window.");
|
||||
MainWindow = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CLIENTEDGE,
|
||||
TEST_WND_CLASS, "Button test",
|
||||
WS_OVERLAPPEDWINDOW, 50, 50, 180, 365,
|
||||
NULL, NULL, AppInstance, NULL);
|
||||
if (MainWindow == 0) {
|
||||
DPRINT("Error creating main window.");
|
||||
UnregisterClass(TEST_WND_CLASS, AppInstance);
|
||||
MessageBox(0, "Error creating test window.",
|
||||
"Static control test", MB_ICONSTOP | MB_OK);
|
||||
ExitProcess(0);
|
||||
}
|
||||
DPRINT("Showing main window.");
|
||||
ShowWindow(MainWindow, SW_SHOWNORMAL);
|
||||
UpdateWindow(MainWindow);
|
||||
// Run message loop.
|
||||
DPRINT("Entering message loop.");
|
||||
while (GetMessage(&Msg, NULL, 0, 0) > 0) {
|
||||
TranslateMessage(&Msg);
|
||||
DispatchMessage(&Msg);
|
||||
}
|
||||
// Unregister window class.
|
||||
UnregisterClass(TEST_WND_CLASS, AppInstance);
|
||||
DPRINT("Exiting.");
|
||||
|
||||
return Msg.wParam;
|
||||
}
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,22 +0,0 @@
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = windows
|
||||
|
||||
TARGET_NAME = btntest2
|
||||
|
||||
TARGET_SDKLIBS = kernel32.a gdi32.a
|
||||
|
||||
TARGET_OBJECTS = buttontst2.o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -1,219 +0,0 @@
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
|
||||
HFONT tf;
|
||||
LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
|
||||
int WINAPI
|
||||
WinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpszCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
WNDCLASS wc;
|
||||
MSG msg;
|
||||
HWND hWnd;
|
||||
HWND hbtn[26];
|
||||
|
||||
wc.lpszClassName = "ButtonTest";
|
||||
wc.lpfnWndProc = MainWndProc;
|
||||
wc.style = CS_VREDRAW | CS_HREDRAW;
|
||||
wc.hInstance = hInstance;
|
||||
wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION);
|
||||
wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
|
||||
wc.lpszMenuName = NULL;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
if (RegisterClass(&wc) == 0)
|
||||
{
|
||||
fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n",
|
||||
GetLastError());
|
||||
return(1);
|
||||
}
|
||||
|
||||
hWnd = CreateWindow("ButtonTest",
|
||||
"Button Test",
|
||||
WS_OVERLAPPEDWINDOW,
|
||||
0,
|
||||
0,
|
||||
CW_USEDEFAULT,
|
||||
CW_USEDEFAULT,
|
||||
NULL,
|
||||
NULL,
|
||||
hInstance,
|
||||
NULL);
|
||||
if (hWnd == NULL)
|
||||
{
|
||||
fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n",
|
||||
GetLastError());
|
||||
return(1);
|
||||
}
|
||||
|
||||
tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE,
|
||||
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
|
||||
DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons");
|
||||
|
||||
ShowWindow(hWnd, nCmdShow);
|
||||
|
||||
hbtn[0] = CreateWindow(
|
||||
"BUTTON","BS_DEFPUSHBUTTON",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
|
||||
10, 10, 200, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[1] = CreateWindow(
|
||||
"BUTTON","BS_3STATE",WS_VISIBLE | WS_CHILD | BS_3STATE,
|
||||
10, 60, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[2] = CreateWindow(
|
||||
"BUTTON","BS_AUTO3STATE",WS_VISIBLE | WS_CHILD | BS_AUTO3STATE,
|
||||
10, 90, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[3] = CreateWindow(
|
||||
"BUTTON","BS_AUTOCHECKBOX",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX,
|
||||
10, 120, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[4] = CreateWindow(
|
||||
"BUTTON","BS_AUTORADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
|
||||
10, 150, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[5] = CreateWindow(
|
||||
"BUTTON","BS_CHECKBOX",WS_VISIBLE | WS_CHILD | BS_CHECKBOX,
|
||||
10, 180, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[6] = CreateWindow(
|
||||
"BUTTON","BS_GROUPBOX",WS_VISIBLE | WS_CHILD | BS_GROUPBOX,
|
||||
10, 210, 200, 80, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[7] = CreateWindow(
|
||||
"BUTTON","BS_PUSHBUTTON",WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
|
||||
20, 230, 180, 30, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[8] = CreateWindow(
|
||||
"BUTTON","BS_RADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_RADIOBUTTON,
|
||||
10, 300, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[9] = CreateWindow(
|
||||
"BUTTON","BS_AUTORADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
|
||||
220, 160, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[10] = CreateWindow(
|
||||
"BUTTON","BS_DEFPUSHBUTTON|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_BOTTOM,
|
||||
220, 10, 250, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[11] = CreateWindow(
|
||||
"BUTTON","BS_DEFPUSHBUTTON|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_LEFT,
|
||||
480, 10, 250, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[12] = CreateWindow(
|
||||
"BUTTON","BS_DEFPUSHBUTTON|BS_RIGHT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_RIGHT |BS_MULTILINE,
|
||||
740, 10, 150, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[13] = CreateWindow(
|
||||
"BUTTON","BS_AUTORADIOBUTTON|BS_TOP",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_TOP,
|
||||
220, 60, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
// Other Combinations
|
||||
|
||||
hbtn[14] = CreateWindow(
|
||||
"BUTTON","BS_AUTORADIOBUTTON|BS_BOTTOM|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_BOTTOM | BS_MULTILINE,
|
||||
480, 60, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[15] = CreateWindow(
|
||||
"BUTTON","BS_AUTORADIOBUTTON|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_LEFT,
|
||||
740, 80, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[16] = CreateWindow(
|
||||
"BUTTON","BS_AUTORADIOBUTTON|BS_RIGHT|BS_TOP",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_RIGHT | BS_TOP,
|
||||
220, 130, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[17] = CreateWindow(
|
||||
"BUTTON","BS_AUTORADIOBUTTON|BS_TOP|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_TOP| BS_MULTILINE,
|
||||
480, 130, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[18] = CreateWindow(
|
||||
"BUTTON","BS_AUTOCHECKBOX|BS_BOTTOM|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_BOTTOM | BS_MULTILINE,
|
||||
740, 130, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[19] = CreateWindow(
|
||||
"BUTTON","BS_AUTOCHECKBOX|BS_TOP|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE,
|
||||
480, 190, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[20] = CreateWindow(
|
||||
"BUTTON","BS_AUTOCHECKBOX|BS_LEFT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE,
|
||||
220, 230, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[21] = CreateWindow(
|
||||
"BUTTON","BS_AUTOCHECKBOX|BS_RIGHT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_RIGHT | BS_MULTILINE,
|
||||
480, 240, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[22] = CreateWindow(
|
||||
"BUTTON","BS_GROUPBOX|BS_TOP",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_TOP,
|
||||
10, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[23] = CreateWindow(
|
||||
"BUTTON","BS_GROUPBOX|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_BOTTOM,
|
||||
10, 410, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[24] = CreateWindow(
|
||||
"BUTTON","BS_GROUPBOXBOX|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_LEFT,
|
||||
520, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
hbtn[25] = CreateWindow(
|
||||
"BUTTON","BS_GROUPBOX|BS_RIGHT|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_BOTTOM | BS_RIGHT,
|
||||
300, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
|
||||
|
||||
while(GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
DeleteObject(tf);
|
||||
|
||||
return msg.wParam;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HDC hDC;
|
||||
|
||||
switch(msg)
|
||||
{
|
||||
case WM_PAINT:
|
||||
hDC = BeginPaint(hWnd, &ps);
|
||||
SelectObject(hDC, tf);
|
||||
EndPaint(hWnd, &ps);
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
case WM_COMMAND:
|
||||
switch(HIWORD(wParam))
|
||||
{
|
||||
case BN_CLICKED:
|
||||
printf("BUTTON CLICKED !\n");
|
||||
break;
|
||||
case BN_DBLCLK:
|
||||
printf("BUTTON DOUBLE-CLICKED !\n");
|
||||
break;
|
||||
case BN_PUSHED:
|
||||
printf("BUTTON PUSHED !\n");
|
||||
break;
|
||||
case BN_PAINT:
|
||||
printf("BUTTON PAINTED !\n");
|
||||
break;
|
||||
case BN_UNPUSHED:
|
||||
printf("BUTTON UNPUSHED !\n");
|
||||
break;
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
return 0;
|
||||
}
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,20 +0,0 @@
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = windows
|
||||
|
||||
TARGET_NAME = capclock
|
||||
|
||||
TARGET_SDKLIBS = kernel32.a
|
||||
|
||||
TARGET_OBJECTS = capclock.o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -1,70 +0,0 @@
|
||||
/* $Id: capclock.c,v 1.3 2003/11/14 17:13:16 weiden Exp $
|
||||
*
|
||||
* DESCRIPTION: Simple Win32 Caption Clock
|
||||
* PROJECT : ReactOS (test applications)
|
||||
* AUTHOR : Emanuele Aliberti
|
||||
* DATE : 2003-09-03
|
||||
* LICENSE : GNU GPL v2.0
|
||||
*/
|
||||
#include <windows.h>
|
||||
#include <string.h>
|
||||
|
||||
UINT Timer = 1;
|
||||
|
||||
static BOOL CALLBACK DialogFunc(HWND,UINT,WPARAM,LPARAM);
|
||||
static VOID CALLBACK TimerProc(HWND,UINT,UINT,DWORD);
|
||||
|
||||
|
||||
INT STDCALL WinMain (HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, INT nCmdShow)
|
||||
{
|
||||
WNDCLASS wc;
|
||||
|
||||
ZeroMemory (& wc, sizeof wc);
|
||||
wc.lpfnWndProc = DefDlgProc;
|
||||
wc.cbWndExtra = DLGWINDOWEXTRA;
|
||||
wc.hInstance = hinst;
|
||||
wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
|
||||
wc.lpszClassName = "CapClock";
|
||||
RegisterClass (& wc);
|
||||
return DialogBox(hinst, MAKEINTRESOURCE(2), NULL, (DLGPROC) DialogFunc);
|
||||
|
||||
}
|
||||
static int InitializeApp (HWND hDlg,WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
Timer = SetTimer (hDlg,Timer,1000,TimerProc);
|
||||
TimerProc (hDlg,0,0,0);
|
||||
return 1;
|
||||
}
|
||||
static BOOL CALLBACK DialogFunc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (msg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
InitializeApp(hwndDlg,wParam,lParam);
|
||||
return TRUE;
|
||||
case WM_CLOSE:
|
||||
KillTimer (hwndDlg,Timer);
|
||||
EndDialog(hwndDlg,0);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
static VOID CALLBACK TimerProc (HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
|
||||
{
|
||||
CHAR text [20];
|
||||
SYSTEMTIME lt;
|
||||
|
||||
GetLocalTime (& lt);
|
||||
wsprintf (
|
||||
text,
|
||||
"%d-%02d-%02d %02d:%02d:%02d",
|
||||
lt.wYear,
|
||||
lt.wMonth,
|
||||
lt.wDay,
|
||||
lt.wHour,
|
||||
lt.wMinute,
|
||||
lt.wSecond);
|
||||
SetWindowText (hwnd, text);
|
||||
}
|
||||
/* EOF */
|
Binary file not shown.
Before Width: | Height: | Size: 766 B |
@@ -1,52 +0,0 @@
|
||||
#include <windows.h>
|
||||
#include "../../../include/reactos/resource.h"
|
||||
|
||||
/* Icons */
|
||||
|
||||
1 ICON "capclock.ico"
|
||||
|
||||
/* Dialogs */
|
||||
|
||||
2 DIALOG 6, 18, 132, 0
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
FONT 8, "Microsoft Sans Serif"
|
||||
BEGIN
|
||||
END
|
||||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
/* Version information. */
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD
|
||||
PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x40004L
|
||||
FILETYPE 0x2L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", RES_STR_COMPANY_NAME
|
||||
VALUE "FileDescription", "ReactOS W32 Caption Clock\0"
|
||||
VALUE "FileVersion", RES_STR_PRODUCT_VERSION
|
||||
VALUE "InternalName", "capclock\0"
|
||||
VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT
|
||||
VALUE "OriginalFilename", "capclock.exe\0"
|
||||
VALUE "ProductName", RES_STR_PRODUCT_NAME
|
||||
VALUE "ProductVersion", RES_STR_PRODUCT_VERSION
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
Binary file not shown.
Before Width: | Height: | Size: 106 B |
@@ -1,150 +0,0 @@
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include "resource.h"
|
||||
|
||||
static int CaretWidth = 2;
|
||||
static int CaretHeight = 16;
|
||||
static int CharWidth = 10;
|
||||
static int CharHeight = 16;
|
||||
static HBITMAP CaretBitmap;
|
||||
|
||||
LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM);
|
||||
|
||||
int WINAPI
|
||||
WinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpszCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
WNDCLASS wc;
|
||||
MSG msg;
|
||||
HWND hWnd;
|
||||
|
||||
CaretBitmap = LoadBitmap(hInstance, (LPCTSTR)IDB_CARET);
|
||||
|
||||
wc.lpszClassName = "CaretTestClass";
|
||||
wc.lpfnWndProc = MainWndProc;
|
||||
wc.style = CS_VREDRAW | CS_HREDRAW;
|
||||
wc.hInstance = hInstance;
|
||||
wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION);
|
||||
wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
|
||||
wc.lpszMenuName = NULL;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
if (RegisterClass(&wc) == 0)
|
||||
{
|
||||
fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n",
|
||||
GetLastError());
|
||||
return(1);
|
||||
}
|
||||
|
||||
hWnd = CreateWindow(wc.lpszClassName,
|
||||
"Caret Test",
|
||||
WS_OVERLAPPEDWINDOW,
|
||||
0,
|
||||
0,
|
||||
200,
|
||||
250,
|
||||
NULL,
|
||||
NULL,
|
||||
hInstance,
|
||||
NULL);
|
||||
if (hWnd == NULL)
|
||||
{
|
||||
fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n",
|
||||
GetLastError());
|
||||
return(1);
|
||||
}
|
||||
|
||||
ShowWindow(hWnd, nCmdShow);
|
||||
|
||||
while(GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
return msg.wParam;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pt;
|
||||
switch(msg)
|
||||
{
|
||||
case WM_ACTIVATE:
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case WA_ACTIVE:
|
||||
case WA_CLICKACTIVE:
|
||||
if(!ShowCaret(hWnd))
|
||||
DbgPrint("ShowCaret(0x%x)\n", hWnd);
|
||||
break;
|
||||
case WA_INACTIVE:
|
||||
if(!HideCaret(hWnd))
|
||||
DbgPrint("HideCaret(0x%x)\n", hWnd);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_KEYDOWN:
|
||||
if(!GetCaretPos(&pt))
|
||||
{
|
||||
DbgPrint("GetCaretPos() failed!\n");
|
||||
break;
|
||||
}
|
||||
switch(wParam)
|
||||
{
|
||||
case VK_LEFT:
|
||||
pt.x -= CharWidth;
|
||||
break;
|
||||
case VK_UP:
|
||||
pt.y -= CharHeight;
|
||||
break;
|
||||
case VK_RIGHT:
|
||||
pt.x += CharWidth;
|
||||
break;
|
||||
case VK_DOWN:
|
||||
pt.y += CharHeight;
|
||||
break;
|
||||
}
|
||||
if(!SetCaretPos(pt.x, pt.y))
|
||||
DbgPrint("SetCaretPos() failed!\n");
|
||||
break;
|
||||
|
||||
case WM_RBUTTONDOWN:
|
||||
if(!CreateCaret(hWnd, CaretBitmap, 0, 0))
|
||||
DbgPrint("CreateCaret() for window 0x%x failed!\n", hWnd);
|
||||
else
|
||||
if(!ShowCaret(hWnd))
|
||||
DbgPrint("ShowCaret(0x%x)\n", hWnd);
|
||||
break;
|
||||
|
||||
case WM_LBUTTONDOWN:
|
||||
if(!CreateCaret(hWnd, (HBITMAP)0, CaretWidth, CaretHeight))
|
||||
DbgPrint("CreateCaret() for window 0x%x failed!\n", hWnd);
|
||||
else
|
||||
if(!ShowCaret(hWnd))
|
||||
DbgPrint("ShowCaret(0x%x)\n", hWnd);
|
||||
break;
|
||||
|
||||
case WM_CREATE:
|
||||
if(!CreateCaret(hWnd, (HBITMAP)0, CaretWidth, CaretHeight))
|
||||
DbgPrint("CreateCaret() for window 0x%x failed!\n", hWnd);
|
||||
else
|
||||
if(!SetCaretPos(1, 1))
|
||||
DbgPrint("SetCaretPos(%i, %i) failed!\n", 1, 1);
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
if(!DestroyCaret())
|
||||
DbgPrint("DestroyCaret() failed!\n");
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
default:
|
||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
return 0;
|
||||
}
|
@@ -1,5 +0,0 @@
|
||||
#include <defines.h>
|
||||
#include <reactos/resource.h>
|
||||
#include "resource.h"
|
||||
|
||||
IDB_CARET BITMAP DISCARDABLE "caret.bmp"
|
@@ -1,23 +0,0 @@
|
||||
# $Id: makefile,v 1.2 2003/11/14 17:13:16 weiden Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = no
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = windows
|
||||
|
||||
TARGET_NAME = carets
|
||||
|
||||
TARGET_SDKLIBS = kernel32.a gdi32.a ntdll.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -1 +0,0 @@
|
||||
#define IDB_CARET 101
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,687 +0,0 @@
|
||||
/* ComboBox Control Test for ReactOS.
|
||||
|
||||
* This is a test program. Not made to be fast, small
|
||||
* easy to mantain, or portable.
|
||||
|
||||
* I'm not erasing text because I don't want to use other functions from the API
|
||||
* or make this more complex. Also Fonts are not heavily used.
|
||||
|
||||
* This source code is in the PUBLIC DOMAIN and has NO WARRANTY.
|
||||
* by Waldo Alvarez Ca<43>izares <wac at ghost.matcom.uh.cu>, started July 11, 2003. */
|
||||
|
||||
//#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#include "utils.h"
|
||||
|
||||
#define CONTROLCLASS "COMBOBOX" /* the class name */
|
||||
#define CONTROLCLASSW L"COMBOBOX" /* the class name in unicode*/
|
||||
|
||||
#define WINDOWWIDTH 560
|
||||
#define WINDOWHEIGHT 350
|
||||
|
||||
/* --- Command IDs of some buttons --- */
|
||||
#define CREATEWINDOW_ID 106
|
||||
#define CREATEWINDOWEX_ID 107
|
||||
#define CREATEWINDOWW_ID 108
|
||||
#define INITPAGE_ID 400
|
||||
#define SECONDPAGE_ID 401
|
||||
#define BACKFIRSTPAGE_ID 402
|
||||
|
||||
/* --- Position where the result text goes --- */
|
||||
#define ResultX 0
|
||||
#define ResultY 305
|
||||
|
||||
/* --- Position where the notify text goes --- */
|
||||
#define NOTIFYX 390
|
||||
#define NOTIFYY 285
|
||||
|
||||
/* --- The width of most buttons --- */
|
||||
#define CHECKBUTWIDTH 190
|
||||
#define SCROLLAMOUNT -15
|
||||
|
||||
/* Size of buffer to hold resulting strings from conversion
|
||||
and returned by messages */
|
||||
#define BUFFERLEN 80
|
||||
char TextBuffer[BUFFERLEN]={'R','e','s','u','l','t',':',' '};
|
||||
|
||||
HWND g_hwnd = NULL;
|
||||
HINSTANCE g_hInst = NULL;
|
||||
|
||||
int pos = 10;
|
||||
int n = 0;
|
||||
int yButPos = 10;
|
||||
int xButPos = 0;
|
||||
|
||||
DWORD ComboStyle = 0;
|
||||
|
||||
/* --- Control coordinates --- */
|
||||
#define CONTROLPOSX 390
|
||||
#define CONTROLPOSY 10
|
||||
DWORD ControlWidth = 160;
|
||||
DWORD ControlHeight = 150;
|
||||
|
||||
static RECT srect = {CONTROLPOSX,CONTROLPOSY,WINDOWWIDTH,WINDOWHEIGHT};
|
||||
|
||||
HWND hwndEdit = NULL;
|
||||
|
||||
RECT rect;
|
||||
DWORD StartP,EndP;
|
||||
HWND hwnd; /* main window handle */
|
||||
|
||||
char AddString[] = "string added";
|
||||
|
||||
typedef void FunctionHandler(HWND,DWORD,WPARAM,LPARAM);
|
||||
typedef FunctionHandler* LPFUNCTIONHANDLER;
|
||||
|
||||
void PrintTextXY(char* Text,int x,int y,int len, RECT rect)
|
||||
{
|
||||
HDC hdc;
|
||||
hdc = GetDC (g_hwnd);
|
||||
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT));
|
||||
|
||||
TextOut (hdc, x,y,Text,len);
|
||||
ReleaseDC (g_hwnd, hdc);
|
||||
|
||||
ValidateRect (g_hwnd, &rect);
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
HandlePrintReturnHex(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
LRESULT ret;
|
||||
RECT rect;
|
||||
ret = SendMessage(handle,Msg,wParam,lParam);
|
||||
htoa((unsigned int)ret,&TextBuffer[8]);
|
||||
GetWindowRect(g_hwnd,&rect);
|
||||
PrintTextXY(TextBuffer,ResultX,ResultY,16,rect);
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
HandlePrintReturnStr(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
LRESULT ret;
|
||||
RECT rect;
|
||||
|
||||
TextBuffer[8] = (char)(BUFFERLEN - 8); /* Setting the max size to put chars in first byte */
|
||||
ret = SendMessage(handle,Msg,wParam,lParam);
|
||||
GetWindowRect(g_hwnd,&rect);
|
||||
PrintTextXY(TextBuffer,ResultX,ResultY,8+(int)ret,rect);
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
HandlePrintRect(HWND handle,DWORD Msg,WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
RECT rect;
|
||||
TextBuffer[8] = (char)(BUFFERLEN - 8); /* Setting the max size to put chars in first byte */
|
||||
SendMessage(handle,Msg,wParam,lParam);
|
||||
|
||||
htoa(rect.top,&TextBuffer[8]);
|
||||
TextBuffer[8+8] = ' ';
|
||||
htoa(rect.bottom,&TextBuffer[8+8+1]);
|
||||
TextBuffer[8+8+8+1] = ' ';
|
||||
htoa(rect.left,&TextBuffer[8+8+8+1+1]);
|
||||
TextBuffer[8+8+8+8+1+1] = ' ';
|
||||
htoa(rect.right,&TextBuffer[8+8+8+8+1+1+1]);
|
||||
|
||||
GetWindowRect(g_hwnd,&rect);
|
||||
PrintTextXY(TextBuffer,ResultX,ResultY,8+4*9-1,rect);
|
||||
}
|
||||
|
||||
struct
|
||||
{
|
||||
char* Text; /* Text for the button */
|
||||
DWORD MsgCode; /* Message Code */
|
||||
WPARAM wParam; /* Well hope you can understand this */
|
||||
LPARAM lParam; /* ditto */
|
||||
LPFUNCTIONHANDLER Handler; /* Funtion called to handle the result of each message */
|
||||
}
|
||||
Msg[] =
|
||||
{
|
||||
{"CB_ADDSTRING",CB_ADDSTRING,0,(LPARAM)&AddString,&HandlePrintReturnHex},
|
||||
{"CB_ADDSTRING - long",CB_ADDSTRING,0,(LPARAM)"very loooooooooong striiinnnnnnnnnggg",&HandlePrintReturnHex},
|
||||
{"CB_DELETESTRING",CB_DELETESTRING,2,0,&HandlePrintReturnHex}, /* remember to catch WM_DELETEITEM*/
|
||||
|
||||
/* What a message, why M$ decided to implement his thing ? */
|
||||
{"CB_DIR - drives",CB_DIR,DDL_DRIVES,
|
||||
/* Hoping that most machines have this */
|
||||
(LPARAM)"C:\\",
|
||||
&HandlePrintReturnHex},
|
||||
|
||||
{"CB_DIR - dirs",CB_DIR,DDL_DIRECTORY,(LPARAM)"C:\\*",&HandlePrintReturnHex},
|
||||
|
||||
{"CB_DIR - files",CB_DIR,
|
||||
DDL_ARCHIVE | DDL_EXCLUSIVE | DDL_HIDDEN | DDL_READONLY | DDL_READWRITE | DDL_SYSTEM,
|
||||
(LPARAM)"C:\\*",&HandlePrintReturnHex},
|
||||
|
||||
/* Do not forget WM_COMPAREITEM */
|
||||
|
||||
{"CB_FINDSTRING",CB_FINDSTRING,1,(LPARAM)"str",&HandlePrintReturnHex},
|
||||
{"CB_FINDSTRINGEXACT(-1)",CB_FINDSTRINGEXACT,-1,(LPARAM)&AddString,&HandlePrintReturnHex},
|
||||
{"CB_FINDSTRINGEXACT(2)",CB_FINDSTRINGEXACT,2,(LPARAM)&AddString,&HandlePrintReturnHex},
|
||||
|
||||
/* "CB_GETCOMBOBOXINFO",CB_GETCOMBOBOXINFO,0,0,&HandlePrintReturnHex, winXP & .net server remember to handle the struct */
|
||||
|
||||
{"CB_GETCOUNT",CB_GETCOUNT,0,0,&HandlePrintReturnHex},
|
||||
|
||||
{"CB_GETCURSEL",CB_GETCURSEL,0,0,&HandlePrintReturnHex},
|
||||
|
||||
/* To implement "CB_GETEDITSEL - vars",CB_GETEDITSEL,,,&HandlePrintReturnHex, */
|
||||
|
||||
{"CB_GETEXTENDEDUI",CB_GETEXTENDEDUI,0,0,&HandlePrintReturnHex},
|
||||
{"CB_GETHORIZONTALEXTENT",CB_GETHORIZONTALEXTENT,0,0,&HandlePrintReturnHex},
|
||||
|
||||
|
||||
|
||||
{"CB_GETLBTEXT",CB_GETLBTEXT,1,(LPARAM)&TextBuffer[8],&HandlePrintReturnStr},
|
||||
{"CB_GETLBTEXTLEN",CB_GETLBTEXTLEN,1,0,&HandlePrintReturnHex},
|
||||
{"CB_GETLOCALE",CB_GETLOCALE,0,0,&HandlePrintReturnHex},
|
||||
|
||||
/* "CB_GETMINVISIBLE",CB_GETMINVISIBLE,0,0,&HandlePrintReturnHex, Included in Windows XP and Windows .NET Server. */
|
||||
|
||||
{"CB_GETTOPINDEX",CB_GETTOPINDEX,0,0,&HandlePrintReturnHex},
|
||||
|
||||
{"CB_INITSTORAGE",CB_INITSTORAGE,10,200,&HandlePrintReturnHex},
|
||||
{"CB_INSERTSTRING",CB_INSERTSTRING,2,(LPARAM)"inserted string",&HandlePrintReturnHex},
|
||||
|
||||
{"CB_LIMITTEXT",CB_LIMITTEXT,10,0,&HandlePrintReturnHex},
|
||||
{"CB_RESETCONTENT",CB_RESETCONTENT ,0,0,&HandlePrintReturnHex},
|
||||
{"CB_SELECTSTRING",CB_SELECTSTRING,2,(LPARAM)"str",&HandlePrintReturnHex},
|
||||
{"CB_SETCURSEL",CB_SETCURSEL,1,0,&HandlePrintReturnHex},
|
||||
|
||||
{"CB_SETDROPPEDWIDTH",CB_SETDROPPEDWIDTH,250,0,&HandlePrintReturnHex},
|
||||
|
||||
{"CB_SETEXTENDEDUI - set",CB_SETEXTENDEDUI,TRUE,0,&HandlePrintReturnHex},
|
||||
{"CB_SETEXTENDEDUI - clear",CB_SETEXTENDEDUI,FALSE,0,&HandlePrintReturnHex},
|
||||
|
||||
/*
|
||||
* win2k have a small bug with this ^ , if you press F4 while it is cleared,
|
||||
* the combobox is using style cbs_dropdown
|
||||
* and the pointer is over the edit box then the mouse pointer is not changed
|
||||
* to an arrow
|
||||
*/
|
||||
|
||||
{"CB_SETHORIZONTALEXTENT",CB_SETHORIZONTALEXTENT,500,0,&HandlePrintReturnHex},
|
||||
|
||||
{"CB_GETITEMDATA",CB_GETITEMDATA,1,0,&HandlePrintReturnHex},
|
||||
{"CB_SETITEMDATA",CB_SETITEMDATA,1,0x791031,&HandlePrintReturnHex},
|
||||
|
||||
{"CB_SETITEMHEIGHT",CB_SETITEMHEIGHT,-1,30,&HandlePrintReturnHex},
|
||||
{"CB_GETITEMHEIGHT",CB_GETITEMHEIGHT,2,0,&HandlePrintReturnHex},
|
||||
|
||||
/* "CB_SETMINVISIBLE",CB_SETMINVISIBLE,4,0,&HandlePrintReturnHex, Included in Windows XP and Windows .NET Server */
|
||||
|
||||
{"CB_GETEDITSEL",CB_GETEDITSEL,(WPARAM)NULL,(LPARAM)NULL,&HandlePrintReturnHex},
|
||||
{"CB_SETEDITSEL",CB_SETEDITSEL,0,0x00020005,&HandlePrintReturnHex},
|
||||
{"CB_SETEDITSEL - clear",CB_SETEDITSEL,0,0xFFFFFFFF,&HandlePrintReturnHex},
|
||||
|
||||
{"CB_SETTOPINDEX",CB_SETTOPINDEX,3,0,&HandlePrintReturnHex},
|
||||
|
||||
{"CB_SHOWDROPDOWN - true",CB_SHOWDROPDOWN,TRUE,0,&HandlePrintReturnHex},
|
||||
{"CB_SHOWDROPDOWN - false",CB_SHOWDROPDOWN,FALSE,0,&HandlePrintReturnHex},
|
||||
|
||||
{"CB_GETDROPPEDCONTROLRECT",CB_GETDROPPEDCONTROLRECT,0,(LPARAM)&rect,&HandlePrintRect},
|
||||
{"CB_GETDROPPEDSTATE",CB_GETDROPPEDSTATE,0,0,&HandlePrintReturnHex},
|
||||
{"CB_GETDROPPEDWIDTH",CB_GETDROPPEDWIDTH,0,0,&HandlePrintReturnHex},
|
||||
|
||||
{"WM_PASTE",WM_PASTE,0,0,&HandlePrintReturnHex},
|
||||
};
|
||||
|
||||
#define MAXMESSAGEBUTTONS 40
|
||||
|
||||
struct
|
||||
{
|
||||
char* Name; /* Text for the button */
|
||||
DWORD Code; /* Style Code */
|
||||
}
|
||||
Styles[] = {
|
||||
{"WS_DISABLED",WS_DISABLED},
|
||||
{"CBS_AUTOHSCROLL",CBS_AUTOHSCROLL},
|
||||
{"CBS_DISABLENOSCROLL",CBS_DISABLENOSCROLL},
|
||||
{"CBS_DROPDOWN",CBS_DROPDOWN},
|
||||
{"CBS_DROPDOWNLIST",CBS_DROPDOWNLIST},
|
||||
{"CBS_HASSTRINGS",CBS_HASSTRINGS},
|
||||
{"CBS_LOWERCASE",CBS_LOWERCASE},
|
||||
{"CBS_NOINTEGRALHEIGHT",CBS_NOINTEGRALHEIGHT},
|
||||
{"CBS_OEMCONVERT",CBS_OEMCONVERT},
|
||||
{"CBS_OWNERDRAWFIXED",CBS_OWNERDRAWFIXED},
|
||||
{"CBS_OWNERDRAWVARIABLE",CBS_OWNERDRAWVARIABLE},
|
||||
{"CBS_SIMPLE",CBS_SIMPLE},
|
||||
{"CBS_SORT",CBS_SORT},
|
||||
{"CBS_UPPERCASE",CBS_UPPERCASE},
|
||||
{"CBS_DISABLENOSCROLL",CBS_DISABLENOSCROLL},
|
||||
{"WS_HSCROLL",WS_HSCROLL},
|
||||
{"WS_VSCROLL",WS_VSCROLL}
|
||||
};
|
||||
|
||||
/* The number of check buttons we have.
|
||||
* Maybe some calculations at compile time would be better
|
||||
*/
|
||||
|
||||
#define NUMBERCHECKS 17
|
||||
|
||||
#define NUMBERBUTTONS NUMBERCHECKS + 7
|
||||
HWND Buttons[NUMBERBUTTONS];
|
||||
HWND MessageButtons[MAXMESSAGEBUTTONS];
|
||||
HWND Back1But,Back2But;
|
||||
HWND NextBut;
|
||||
|
||||
HWND
|
||||
CreateCheckButton(const char* lpWindowName, DWORD xSize, DWORD id)
|
||||
{
|
||||
HWND h;
|
||||
h = CreateWindowEx(0,
|
||||
"BUTTON",
|
||||
lpWindowName,
|
||||
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
|
||||
xButPos, /* x */
|
||||
yButPos, /* y */
|
||||
xSize, /* nWidth */
|
||||
20, /* nHeight */
|
||||
g_hwnd,
|
||||
(HMENU) id,
|
||||
g_hInst,
|
||||
NULL
|
||||
);
|
||||
yButPos += 21;
|
||||
return h;
|
||||
}
|
||||
|
||||
HWND
|
||||
CreatePushButton(const char* lpWindowName, DWORD xSize, DWORD id,DWORD Style)
|
||||
{
|
||||
|
||||
HWND h = CreateWindow("BUTTON",
|
||||
lpWindowName,
|
||||
WS_CHILD | BS_PUSHBUTTON | Style,
|
||||
xButPos, /* x */
|
||||
yButPos, /* y */
|
||||
xSize, /* nWidth */
|
||||
20, /* nHeight */
|
||||
g_hwnd,
|
||||
(HMENU) id,
|
||||
g_hInst,
|
||||
NULL
|
||||
);
|
||||
|
||||
yButPos += 21;
|
||||
return h;
|
||||
}
|
||||
|
||||
VOID
|
||||
ReadNHide()
|
||||
{
|
||||
int i;
|
||||
ComboStyle = 0;
|
||||
for (i=0 ; i< NUMBERCHECKS ; i++)
|
||||
{
|
||||
if(BST_CHECKED == SendMessage(Buttons[i],BM_GETCHECK,0,0))
|
||||
ComboStyle |= Styles[i].Code;
|
||||
ShowWindow(Buttons[i],SW_HIDE);
|
||||
}
|
||||
|
||||
for (; i< NUMBERBUTTONS ; i++)ShowWindow(Buttons[i],SW_HIDE);
|
||||
for (i=0 ; i< 26 ; i++) ShowWindow(MessageButtons[i],SW_SHOW);
|
||||
|
||||
ShowWindow(Back1But,SW_SHOW);
|
||||
ShowWindow(NextBut,SW_SHOW);
|
||||
}
|
||||
|
||||
VOID
|
||||
ForwardToSecondPage()
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<26;i++)ShowWindow(MessageButtons[i],SW_HIDE);
|
||||
for(;i<MAXMESSAGEBUTTONS;i++)ShowWindow(MessageButtons[i],SW_SHOW);
|
||||
ShowWindow(Back2But,SW_SHOW);
|
||||
|
||||
ShowWindow(Back1But,SW_HIDE);
|
||||
ShowWindow(NextBut,SW_HIDE);
|
||||
}
|
||||
|
||||
VOID
|
||||
BackToFirstPage()
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<26;i++)ShowWindow(MessageButtons[i],SW_SHOW);
|
||||
for(;i<MAXMESSAGEBUTTONS;i++)ShowWindow(MessageButtons[i],SW_HIDE);
|
||||
ShowWindow(Back2But,SW_HIDE);
|
||||
ShowWindow(Back1But,SW_SHOW);
|
||||
ShowWindow(NextBut,SW_SHOW);
|
||||
}
|
||||
|
||||
VOID
|
||||
BackToInitialPage()
|
||||
{
|
||||
int i;
|
||||
DestroyWindow(hwndEdit);
|
||||
for (i=0 ; i< NUMBERBUTTONS ; i++) {ShowWindow(Buttons[i],SW_SHOW);}
|
||||
for (i=0;i<26;i++)ShowWindow(MessageButtons[i],SW_HIDE);
|
||||
ShowWindow(Back1But,SW_HIDE);
|
||||
ShowWindow(NextBut,SW_HIDE);
|
||||
}
|
||||
|
||||
LRESULT
|
||||
CALLBACK
|
||||
WndProc ( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
int i;
|
||||
switch ( msg )
|
||||
{
|
||||
case WM_CREATE:
|
||||
g_hwnd = hwnd;
|
||||
|
||||
/* ---- Initial page ---- */
|
||||
|
||||
for (i = 0 ; i < 14 ; i++)
|
||||
Buttons[i] = CreateCheckButton(Styles[i].Name,CHECKBUTWIDTH,500+i);
|
||||
|
||||
xButPos += CHECKBUTWIDTH + 10;
|
||||
yButPos = 10;
|
||||
|
||||
for (; i < NUMBERCHECKS ; i++)
|
||||
Buttons[i] = CreateCheckButton(Styles[i].Name,CHECKBUTWIDTH,500+i);
|
||||
|
||||
Buttons[i++] = CreatePushButton("Width +",70,100,WS_VISIBLE);
|
||||
Buttons[i++] = CreatePushButton("Width -",70,101,WS_VISIBLE);
|
||||
|
||||
Buttons[i++] = CreatePushButton("Heigth +",70,102,WS_VISIBLE);
|
||||
Buttons[i++] = CreatePushButton("Heigth -",70,103,WS_VISIBLE);
|
||||
|
||||
Buttons[i++] = CreatePushButton("CreateWindowA",CHECKBUTWIDTH,CREATEWINDOW_ID,WS_VISIBLE);
|
||||
Buttons[i++] = CreatePushButton("CreateWindowExA",CHECKBUTWIDTH,CREATEWINDOWEX_ID,WS_VISIBLE);
|
||||
Buttons[i++] = CreatePushButton("CreateWindowExW",CHECKBUTWIDTH,CREATEWINDOWW_ID,WS_VISIBLE);
|
||||
|
||||
|
||||
/* ---- The 1st page of buttons ---- */
|
||||
|
||||
xButPos = 0;
|
||||
yButPos = 10;
|
||||
|
||||
for (i = 0 ; i < 14 ; i++)
|
||||
MessageButtons[i] = CreatePushButton(Msg[i].Text,CHECKBUTWIDTH,600+i,0);
|
||||
|
||||
xButPos += CHECKBUTWIDTH + 10;
|
||||
yButPos = 10;
|
||||
|
||||
for (; i < 26 ; i++)
|
||||
MessageButtons[i] = CreatePushButton(Msg[i].Text,CHECKBUTWIDTH,600+i,0);
|
||||
|
||||
Back1But = CreatePushButton("Back - destroys ComboBox",CHECKBUTWIDTH,INITPAGE_ID,0);
|
||||
NextBut = CreatePushButton("Next",CHECKBUTWIDTH,SECONDPAGE_ID,0);
|
||||
|
||||
/* ---- The 2nd page of buttons ------*/
|
||||
|
||||
xButPos = 0;
|
||||
yButPos = 10;
|
||||
|
||||
for (; i<40; i++)
|
||||
MessageButtons[i] = CreatePushButton(Msg[i].Text,CHECKBUTWIDTH,600+i,0);
|
||||
|
||||
xButPos += CHECKBUTWIDTH + 10;
|
||||
yButPos = 10;
|
||||
|
||||
for (; i < MAXMESSAGEBUTTONS ; i++)
|
||||
MessageButtons[i] = CreatePushButton(Msg[i].Text,CHECKBUTWIDTH,600+i,0);
|
||||
|
||||
Back2But = CreatePushButton("Back",CHECKBUTWIDTH,BACKFIRSTPAGE_ID,0);
|
||||
|
||||
break;
|
||||
|
||||
case WM_COMMAND:
|
||||
if (LOWORD(wParam) >= 600)
|
||||
{
|
||||
Msg[LOWORD(wParam)-600].Handler(hwndEdit,
|
||||
Msg[LOWORD(wParam)-600].MsgCode,
|
||||
Msg[LOWORD(wParam)-600].wParam,
|
||||
Msg[LOWORD(wParam)-600].lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(LOWORD(wParam)){
|
||||
|
||||
case 100:
|
||||
ControlWidth += 10;
|
||||
break;
|
||||
|
||||
case 101:
|
||||
ControlWidth -= 10;
|
||||
break;
|
||||
|
||||
case 102:
|
||||
ControlHeight += 10;
|
||||
break;
|
||||
|
||||
case 103:
|
||||
ControlHeight -= 10;
|
||||
break;
|
||||
|
||||
case INITPAGE_ID:
|
||||
BackToInitialPage();
|
||||
break;
|
||||
|
||||
case SECONDPAGE_ID:
|
||||
ForwardToSecondPage();
|
||||
break;
|
||||
|
||||
case BACKFIRSTPAGE_ID:
|
||||
BackToFirstPage();
|
||||
break;
|
||||
|
||||
case CREATEWINDOW_ID:
|
||||
ReadNHide();
|
||||
srect.top = CONTROLPOSY + ControlHeight;
|
||||
hwndEdit = CreateWindow(CONTROLCLASS,
|
||||
NULL,
|
||||
ComboStyle | WS_CHILD | WS_VISIBLE,
|
||||
CONTROLPOSX,
|
||||
CONTROLPOSY,
|
||||
ControlWidth,
|
||||
ControlHeight,
|
||||
g_hwnd,
|
||||
NULL,
|
||||
g_hInst,
|
||||
NULL);
|
||||
break;
|
||||
|
||||
case CREATEWINDOWEX_ID:
|
||||
ReadNHide();
|
||||
srect.top = CONTROLPOSY + ControlHeight;
|
||||
hwndEdit = CreateWindowEx(WS_EX_CLIENTEDGE,
|
||||
CONTROLCLASS,
|
||||
NULL,
|
||||
ComboStyle | WS_CHILD | WS_VISIBLE ,
|
||||
CONTROLPOSX,
|
||||
CONTROLPOSY,
|
||||
ControlWidth,
|
||||
ControlHeight,
|
||||
g_hwnd,
|
||||
NULL,
|
||||
g_hInst,
|
||||
NULL);
|
||||
break;
|
||||
|
||||
case CREATEWINDOWW_ID:
|
||||
ReadNHide();
|
||||
srect.top = CONTROLPOSY + ControlHeight;
|
||||
hwndEdit = CreateWindowExW(WS_EX_CLIENTEDGE,
|
||||
CONTROLCLASSW,
|
||||
NULL,
|
||||
ComboStyle | WS_CHILD | WS_VISIBLE ,
|
||||
CONTROLPOSX,
|
||||
CONTROLPOSY,
|
||||
ControlWidth,
|
||||
ControlHeight,
|
||||
g_hwnd,
|
||||
NULL,
|
||||
g_hInst,
|
||||
NULL);
|
||||
break;
|
||||
}
|
||||
|
||||
if (lParam == (LPARAM)hwndEdit)
|
||||
switch(HIWORD(wParam))
|
||||
{
|
||||
case CBN_DROPDOWN:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("CBN_DROPDOWN notification",NOTIFYX,NOTIFYY,25,srect);
|
||||
break;
|
||||
|
||||
case CBN_CLOSEUP:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("CBN_CLOSEUP notification",NOTIFYX,NOTIFYY,24,srect);
|
||||
break;
|
||||
|
||||
case CBN_DBLCLK:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("CBN_DBLCLK notification",NOTIFYX,NOTIFYY,23,srect);
|
||||
break;
|
||||
|
||||
case CBN_EDITCHANGE:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("CBN_EDITCHANGE notification",NOTIFYX,NOTIFYY,27,srect);
|
||||
break;
|
||||
|
||||
case CBN_ERRSPACE:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("CBN_ERRSPACE notification",NOTIFYX,NOTIFYY,25,srect);
|
||||
break;
|
||||
|
||||
case CBN_KILLFOCUS:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("CBN_KILLFOCUS notification",NOTIFYX,NOTIFYY,26,srect);
|
||||
break;
|
||||
|
||||
case CBN_EDITUPDATE:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("CBN_EDITUPDATE notification",NOTIFYX,NOTIFYY,27,srect);
|
||||
break;
|
||||
|
||||
case CBN_SELCHANGE:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("CBN_SELCHANGE notification",NOTIFYX,NOTIFYY,26,srect);
|
||||
break;
|
||||
|
||||
case CBN_SELENDCANCEL:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("CBN_SELENDCANCEL notification",NOTIFYX,NOTIFYY,29,srect);
|
||||
break;
|
||||
|
||||
case CBN_SETFOCUS:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("CBN_SETFOCUS notification",NOTIFYX,NOTIFYY,25,srect);
|
||||
break;
|
||||
|
||||
case CBN_SELENDOK:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("CBN_SELENDOK notification",NOTIFYX,NOTIFYY,25,srect);
|
||||
break;
|
||||
}
|
||||
|
||||
return DefWindowProc ( hwnd, msg, wParam, lParam );
|
||||
|
||||
case WM_MEASUREITEM:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("WM_MEASUREITEM called",NOTIFYX,NOTIFYY,21,srect);
|
||||
break;
|
||||
|
||||
case WM_COMPAREITEM:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("WM_COMPAREITEM called",NOTIFYX,NOTIFYY,21,srect);
|
||||
break;
|
||||
|
||||
case WM_DRAWITEM:
|
||||
ScrollWindow (hwnd, 0, SCROLLAMOUNT, &srect, &srect);
|
||||
PrintTextXY("WM_DRAWITEM called",NOTIFYX,NOTIFYY,18,srect);
|
||||
break;
|
||||
|
||||
case WM_SIZE :
|
||||
return 0;
|
||||
|
||||
case WM_CLOSE:
|
||||
DestroyWindow (g_hwnd);
|
||||
return 0;
|
||||
|
||||
case WM_QUERYENDSESSION:
|
||||
return 0;
|
||||
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
}
|
||||
return DefWindowProc ( hwnd, msg, wParam, lParam );
|
||||
}
|
||||
|
||||
|
||||
HWND
|
||||
RegisterAndCreateWindow (HINSTANCE hInst,
|
||||
const char* className,
|
||||
const char* title)
|
||||
{
|
||||
WNDCLASSEX wc;
|
||||
|
||||
|
||||
g_hInst = hInst;
|
||||
|
||||
wc.cbSize = sizeof (WNDCLASSEX);
|
||||
|
||||
wc.lpfnWndProc = WndProc; /* window procedure */
|
||||
wc.hInstance = hInst; /* owner of the class */
|
||||
|
||||
wc.lpszClassName = className;
|
||||
wc.hCursor = LoadCursor ( 0, (LPCTSTR)IDC_ARROW );
|
||||
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
|
||||
wc.style = CS_HREDRAW | CS_VREDRAW;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
wc.hIcon = 0;
|
||||
wc.hIconSm = 0;
|
||||
wc.lpszMenuName = 0;
|
||||
|
||||
if ( !RegisterClassEx ( &wc ) )
|
||||
return NULL;
|
||||
|
||||
hwnd = CreateWindowEx (
|
||||
0, /* dwStyleEx */
|
||||
className, /* class name */
|
||||
title, /* window title */
|
||||
|
||||
WS_OVERLAPPEDWINDOW, /* dwStyle */
|
||||
|
||||
1, /* x */
|
||||
1, /* y */
|
||||
WINDOWWIDTH, /* width */
|
||||
WINDOWHEIGHT, /* height */
|
||||
NULL, /* hwndParent */
|
||||
NULL, /* hMenu */
|
||||
hInst,
|
||||
0
|
||||
);
|
||||
|
||||
if (!hwnd) return NULL;
|
||||
|
||||
ShowWindow (hwnd, SW_SHOW);
|
||||
UpdateWindow (hwnd);
|
||||
|
||||
return hwnd;
|
||||
}
|
||||
|
||||
int
|
||||
WINAPI
|
||||
WinMain ( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdParam, int cmdShow )
|
||||
{
|
||||
char className [] = "ComboBox Control Test";
|
||||
MSG msg;
|
||||
|
||||
RegisterAndCreateWindow ( hInst, className, "ComboBox Control Test" );
|
||||
|
||||
while (GetMessage (&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage (&msg);
|
||||
DispatchMessage (&msg);
|
||||
}
|
||||
return (int)msg.wParam;
|
||||
}
|
@@ -1,25 +0,0 @@
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = windows
|
||||
|
||||
TARGET_NAME = combotst
|
||||
|
||||
TARGET_SDKLIBS = kernel32.a gdi32.a
|
||||
|
||||
TARGET_OBJECTS = \
|
||||
combotst.o \
|
||||
utils.o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -1,33 +0,0 @@
|
||||
/*
|
||||
* Edit Control Test for ReactOS, quick n' dirty. There you go
|
||||
* This source code is in the PUBLIC DOMAIN and has NO WARRANTY.
|
||||
* by Waldo Alvarez Ca<43>izares <wac at ghost.matcom.uh.cu>, June 22, 2003.
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
static const char hexvals[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
|
||||
VOID htoa (unsigned int val, char *buf)
|
||||
{
|
||||
int i;
|
||||
buf += 7;
|
||||
|
||||
for (i=0;i<8;i++)
|
||||
{
|
||||
*buf-- = hexvals[val & 0x0000000F];
|
||||
val = val >> 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
VOID strcpy_(char *dst, const char *src)
|
||||
{
|
||||
const char* p = src;
|
||||
while ((*dst++ = *p++)) {}
|
||||
}
|
||||
|
||||
VOID strcpyw_(wchar_t* dst,wchar_t* src)
|
||||
{
|
||||
const wchar_t* p = src;
|
||||
while ((*dst++ = *p++)) {}
|
||||
}
|
@@ -1,9 +0,0 @@
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
VOID htoa (unsigned int, char *);
|
||||
VOID strcpy_(char *, const char *);
|
||||
VOID strcpyw_(wchar_t*,wchar_t*);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
@@ -3,4 +3,3 @@
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# $Id: Makefile,v 1.8 2003/11/14 17:13:16 weiden Exp $
|
||||
# $Id: Makefile,v 1.7 2002/06/02 19:24:57 chorns Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
@@ -12,8 +12,6 @@ TARGET_NAME = consume
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
@@ -1,6 +1,3 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# $Id: Makefile,v 1.2 2003/11/14 17:13:16 weiden Exp $
|
||||
# $Id: Makefile,v 1.1 2002/12/27 23:54:33 gvg Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
@@ -12,8 +12,6 @@ TARGET_NAME = copymove
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
@@ -4,7 +4,6 @@
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <tchar.h>
|
||||
#include <windows.h>
|
||||
|
||||
@@ -55,20 +54,20 @@ CreateTestFile(LPCTSTR filename, DWORD attributes)
|
||||
0);
|
||||
|
||||
if (INVALID_HANDLE_VALUE == file) {
|
||||
fprintf(stderr, "CreateFile failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "CreateFile failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
for(c = 0; c < sizeof(buffer); c++) {
|
||||
buffer[c] = (char) c;
|
||||
}
|
||||
if (! WriteFile(file, buffer, sizeof(buffer), &wrote, NULL)) {
|
||||
fprintf(stderr, "WriteFile failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "WriteFile failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
CloseHandle(file);
|
||||
|
||||
if (! SetFileAttributes(filename, attributes)) {
|
||||
fprintf(stderr, "SetFileAttributes failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "SetFileAttributes failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
@@ -83,7 +82,7 @@ static void
|
||||
CreateTestDir(LPCTSTR dirname)
|
||||
{
|
||||
if (! CreateDirectory(dirname, NULL)) {
|
||||
fprintf(stderr, "CreateDirectory failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "CreateDirectory failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
@@ -106,21 +105,21 @@ CheckTestFile(LPCTSTR filename, DWORD attributes)
|
||||
0);
|
||||
|
||||
if (INVALID_HANDLE_VALUE == file) {
|
||||
fprintf(stderr, "CreateFile failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "CreateFile failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (! ReadFile(file, buffer, sizeof(buffer), &read, NULL)) {
|
||||
fprintf(stderr, "ReadFile failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "ReadFile failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
if (read != sizeof(buffer)) {
|
||||
fprintf(stderr, "Trying to read %u bytes but got %lu bytes\n", sizeof(buffer), read);
|
||||
fprintf(stderr, "Trying to read %d bytes but got %d bytes\n", sizeof(buffer), read);
|
||||
exit(1);
|
||||
}
|
||||
for(c = 0; c < sizeof(buffer); c++) {
|
||||
if (buffer[c] != (char) c) {
|
||||
fprintf(stderr, "File contents changed at position %u\n", c);
|
||||
fprintf(stderr, "File contents changed at position %d\n", c);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
@@ -129,11 +128,11 @@ CheckTestFile(LPCTSTR filename, DWORD attributes)
|
||||
|
||||
diskattr = GetFileAttributes(filename);
|
||||
if (INVALID_FILE_ATTRIBUTES == diskattr) {
|
||||
fprintf(stderr, "GetFileAttributes failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "GetFileAttributes failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
if (diskattr != attributes) {
|
||||
fprintf(stderr, "Attribute mismatch, expected 0x%08lx found 0x%08lx\n", attributes, diskattr);
|
||||
fprintf(stderr, "Attribute mismatch, expected 0x%08x found 0x%08x\n", attributes, diskattr);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
@@ -150,7 +149,7 @@ main(int argc, char *argv[])
|
||||
CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_ARCHIVE);
|
||||
DeleteTestFile(_T("end.dat"));
|
||||
if (! MoveFile(_T("begin.dat"), _T("end.dat"))) {
|
||||
fprintf(stderr, "MoveFile failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "MoveFile failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
CheckTestFile(_T("end.dat"), FILE_ATTRIBUTE_ARCHIVE);
|
||||
@@ -163,7 +162,7 @@ main(int argc, char *argv[])
|
||||
fprintf(stderr, "MoveFile succeeded but shouldn't have\n");
|
||||
exit(1);
|
||||
} else if (ERROR_FILE_NOT_FOUND != GetLastError()) {
|
||||
fprintf(stderr, "MoveFile failed with unexpected code %lu\n", GetLastError());
|
||||
fprintf(stderr, "MoveFile failed with unexpected code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
DeleteTestFile(_T("end.dat"));
|
||||
@@ -177,7 +176,7 @@ main(int argc, char *argv[])
|
||||
fprintf(stderr, "MoveFile succeeded but shouldn't have\n");
|
||||
exit(1);
|
||||
} else if (ERROR_ALREADY_EXISTS != GetLastError()) {
|
||||
fprintf(stderr, "MoveFile failed with unexpected code %lu\n", GetLastError());
|
||||
fprintf(stderr, "MoveFile failed with unexpected code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
DeleteTestFile(_T("begin.dat"));
|
||||
@@ -191,7 +190,7 @@ main(int argc, char *argv[])
|
||||
CreateTestFile(_T("begin\\file.dat"), FILE_ATTRIBUTE_NORMAL);
|
||||
DeleteTestDir(_T("end"));
|
||||
if (! MoveFile(_T("begin"), _T("end"))) {
|
||||
fprintf(stderr, "MoveFile failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "MoveFile failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
CheckTestFile(_T("end\\file.dat"), FILE_ATTRIBUTE_NORMAL);
|
||||
@@ -203,7 +202,7 @@ main(int argc, char *argv[])
|
||||
CreateTestFile(_T("file.dat"), FILE_ATTRIBUTE_NORMAL);
|
||||
CreateTestDir(_T("end"));
|
||||
if (! MoveFile(_T("file.dat"), _T("end\\file.dat"))) {
|
||||
fprintf(stderr, "MoveFile failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "MoveFile failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
CheckTestFile(_T("end\\file.dat"), FILE_ATTRIBUTE_ARCHIVE);
|
||||
@@ -214,7 +213,7 @@ main(int argc, char *argv[])
|
||||
CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_READONLY);
|
||||
DeleteTestFile(_T("end.dat"));
|
||||
if (! MoveFile(_T("begin.dat"), _T("end.dat"))) {
|
||||
fprintf(stderr, "MoveFile failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "MoveFile failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
CheckTestFile(_T("end.dat"), FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_READONLY);
|
||||
@@ -226,7 +225,7 @@ main(int argc, char *argv[])
|
||||
CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_ARCHIVE);
|
||||
DeleteTestFile(otherfile);
|
||||
if (! MoveFile(_T("begin.dat"), otherfile)) {
|
||||
fprintf(stderr, "MoveFile failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "MoveFile failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
CheckTestFile(otherfile, FILE_ATTRIBUTE_ARCHIVE);
|
||||
@@ -239,7 +238,7 @@ main(int argc, char *argv[])
|
||||
CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_ARCHIVE);
|
||||
CreateTestFile(_T("end.dat"), FILE_ATTRIBUTE_ARCHIVE);
|
||||
if (! MoveFileEx(_T("begin.dat"), _T("end.dat"), MOVEFILE_REPLACE_EXISTING)) {
|
||||
fprintf(stderr, "MoveFileEx failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "MoveFileEx failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
DeleteTestFile(_T("begin.dat"));
|
||||
@@ -255,7 +254,7 @@ main(int argc, char *argv[])
|
||||
exit(1);
|
||||
} else if (ERROR_ALREADY_EXISTS != GetLastError() &&
|
||||
ERROR_ACCESS_DENIED != GetLastError()) {
|
||||
fprintf(stderr, "MoveFileEx failed with unexpected code %lu\n", GetLastError());
|
||||
fprintf(stderr, "MoveFileEx failed with unexpected code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
DeleteTestFile(_T("begin.dat"));
|
||||
@@ -273,7 +272,7 @@ main(int argc, char *argv[])
|
||||
fprintf(stderr, "MoveFileEx succeeded but shouldn't have\n");
|
||||
exit(1);
|
||||
} else if (ERROR_NOT_SAME_DEVICE != GetLastError()) {
|
||||
fprintf(stderr, "MoveFileEx failed with unexpected code %lu\n", GetLastError());
|
||||
fprintf(stderr, "MoveFileEx failed with unexpected code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
DeleteTestFile(otherfile);
|
||||
@@ -288,7 +287,7 @@ main(int argc, char *argv[])
|
||||
CreateTestFile(_T("begin.dat"), FILE_ATTRIBUTE_ARCHIVE);
|
||||
DeleteTestFile(otherfile);
|
||||
if (! MoveFileEx(_T("begin.dat"), otherfile, MOVEFILE_COPY_ALLOWED)) {
|
||||
fprintf(stderr, "MoveFileEx failed with code %lu\n", GetLastError());
|
||||
fprintf(stderr, "MoveFileEx failed with code %d\n", GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
CheckTestFile(otherfile, FILE_ATTRIBUTE_ARCHIVE);
|
||||
|
@@ -3,4 +3,3 @@
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# $Id: Makefile,v 1.7 2003/11/14 17:13:16 weiden Exp $
|
||||
# $Id: Makefile,v 1.6 2002/06/02 19:24:58 chorns Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
@@ -14,8 +14,6 @@ TARGET_SDKLIBS = kernel32.a user32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/* $Id: count.c,v 1.2 2003/11/14 17:13:16 weiden Exp $
|
||||
/* $Id: count.c,v 1.1 2001/03/26 21:30:20 ea Exp $
|
||||
*
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int n = 0;
|
||||
|
||||
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,25 +0,0 @@
|
||||
# $Id: Makefile,v 1.2 2004/08/18 02:16:00 navaraf Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = console
|
||||
|
||||
TARGET_NAME = create-links
|
||||
|
||||
TARGET_SDKLIBS = kernel32.a gdi32.a ole32.a shell32.a shlwapi.a
|
||||
|
||||
TARGET_GCCLIBS = uuid
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror -D__USE_W32API -D_WIN32_IE=0x0400
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -1,97 +0,0 @@
|
||||
/*
|
||||
|
||||
compile via:
|
||||
gcc -o create-links -D_WIN32_IE=0x400 create-links.c -lole32 -luuid -lshell32 -lshlwapi
|
||||
|
||||
Martin Fuchs, 27.12.2003
|
||||
|
||||
*/
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
#include <shlobj.h>
|
||||
#include <objidl.h>
|
||||
#include <shlwapi.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
HRESULT CreateShellLink(LPCSTR linkPath, LPCSTR cmd, LPCSTR arg, LPCSTR dir, LPCSTR iconPath, int icon_nr, LPCSTR comment)
|
||||
{
|
||||
IShellLinkA* psl;
|
||||
IPersistFile* ppf;
|
||||
WCHAR buffer[MAX_PATH];
|
||||
|
||||
HRESULT hr = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLink, (LPVOID*)&psl);
|
||||
|
||||
printf("creating shortcut file '%s' to %s...\n", linkPath, cmd);
|
||||
|
||||
if (SUCCEEDED(hr)) {
|
||||
hr = psl->lpVtbl->SetPath(psl, cmd);
|
||||
|
||||
if (arg)
|
||||
hr = psl->lpVtbl->SetArguments(psl, arg);
|
||||
|
||||
if (dir)
|
||||
hr = psl->lpVtbl->SetWorkingDirectory(psl, dir);
|
||||
|
||||
if (iconPath)
|
||||
hr = psl->lpVtbl->SetIconLocation(psl, iconPath, icon_nr);
|
||||
|
||||
if (comment)
|
||||
hr = psl->lpVtbl->SetDescription(psl, comment);
|
||||
|
||||
hr = psl->lpVtbl->QueryInterface(psl, &IID_IPersistFile, (LPVOID*)&ppf);
|
||||
|
||||
if (SUCCEEDED(hr)) {
|
||||
MultiByteToWideChar(CP_ACP, 0, linkPath, -1, buffer, MAX_PATH);
|
||||
|
||||
hr = ppf->lpVtbl->Save(ppf, buffer, TRUE);
|
||||
|
||||
ppf->lpVtbl->Release(ppf);
|
||||
}
|
||||
|
||||
psl->lpVtbl->Release(psl);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
printf("OK\n\n");
|
||||
else
|
||||
printf("error %08x\n\n", (int) hr);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
char path[MAX_PATH];
|
||||
LPSTR p;
|
||||
|
||||
CoInitialize(NULL);
|
||||
|
||||
/* create some shortcuts in the start menu "programs" folder */
|
||||
SHGetSpecialFolderPathA(0, path, CSIDL_PROGRAMS, TRUE);
|
||||
p = PathAddBackslash(path);
|
||||
|
||||
strcpy(p, "start-cmd.lnk");
|
||||
CreateShellLink(path, "cmd.exe", "", NULL, NULL, 0, "open console window");
|
||||
|
||||
strcpy(p, "start-winhello.lnk");
|
||||
CreateShellLink(path, "winhello.exe", "", NULL, NULL, 0, "launch winhello");
|
||||
|
||||
|
||||
/* create some shortcuts on the desktop */
|
||||
SHGetSpecialFolderPathA(0, path, CSIDL_DESKTOP, TRUE);
|
||||
p = PathAddBackslash(path);
|
||||
|
||||
strcpy(p, "start-wcmd.lnk");
|
||||
CreateShellLink(path, "cmd.exe", "", NULL, NULL, 0, "open console window");
|
||||
|
||||
strcpy(p, "start-winemine.lnk");
|
||||
CreateShellLink(path, "winemine.exe", "", NULL, NULL, 0, "launch winemine");
|
||||
|
||||
CoUninitialize();
|
||||
|
||||
return 0;
|
||||
}
|
@@ -3,4 +3,3 @@
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
||||
|
@@ -40,15 +40,15 @@ WinMain(HINSTANCE hInstance,
|
||||
wc.lpfnWndProc = MainWndProc;
|
||||
wc.style = CS_VREDRAW | CS_HREDRAW;
|
||||
wc.hInstance = hInstance;
|
||||
wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION);
|
||||
wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW);
|
||||
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
|
||||
wc.lpszMenuName = NULL;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
if (RegisterClass(&wc) == 0)
|
||||
{
|
||||
fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n",
|
||||
fprintf(stderr, "RegisterClass failed (last error 0x%X)\n",
|
||||
GetLastError());
|
||||
return(1);
|
||||
}
|
||||
@@ -66,7 +66,7 @@ WinMain(HINSTANCE hInstance,
|
||||
NULL);
|
||||
if (hWnd == NULL)
|
||||
{
|
||||
fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n",
|
||||
fprintf(stderr, "CreateWindow failed (last error 0x%X)\n",
|
||||
GetLastError());
|
||||
return(1);
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# $Id: makefile,v 1.3 2003/11/14 17:13:16 weiden Exp $
|
||||
# $Id: makefile,v 1.2 2003/03/04 10:09:00 gvg Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
@@ -14,8 +14,6 @@ TARGET_SDKLIBS = kernel32.a gdi32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,115 +0,0 @@
|
||||
#include <windows.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <io.h>
|
||||
#include "resource.h"
|
||||
|
||||
static char selected[MAX_PATH + 1];
|
||||
|
||||
BOOL
|
||||
CALLBACK
|
||||
DlgMainProc(
|
||||
HWND hwndDlg,
|
||||
UINT uMsg,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam
|
||||
)
|
||||
{
|
||||
char dir[MAX_PATH + 1];
|
||||
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch(HIWORD(wParam))
|
||||
{
|
||||
case LBN_DBLCLK:
|
||||
{
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case IDC_DIRS:
|
||||
{
|
||||
if(DlgDirSelectEx(hwndDlg, dir, MAX_PATH, IDC_DIRS))
|
||||
{
|
||||
chdir(dir);
|
||||
GetCurrentDirectory(MAX_PATH, dir);
|
||||
DlgDirList(hwndDlg, dir, IDC_DIRS, IDC_DIREDIT, DDL_DIRECTORY | DDL_DRIVES);
|
||||
}
|
||||
else
|
||||
{
|
||||
SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_OK, 0), 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case IDC_OK:
|
||||
{
|
||||
char file[MAX_PATH + 1];
|
||||
int len;
|
||||
|
||||
if(!DlgDirSelectEx(hwndDlg, file, MAX_PATH, IDC_DIRS))
|
||||
{
|
||||
GetCurrentDirectory(MAX_PATH, selected);
|
||||
len = strlen(selected);
|
||||
if(strlen(file))
|
||||
{
|
||||
if(selected[len - 1] != '\\')
|
||||
{
|
||||
lstrcat(selected, "\\");
|
||||
}
|
||||
lstrcat(selected, file);
|
||||
EndDialog(hwndDlg, IDC_OK);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case IDC_CANCEL:
|
||||
{
|
||||
EndDialog(hwndDlg, IDC_CANCEL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
SendDlgItemMessage(hwndDlg, IDC_DIRS, LB_SETCOLUMNWIDTH, 150, 0);
|
||||
GetCurrentDirectory(MAX_PATH, dir);
|
||||
DlgDirList(hwndDlg, dir, IDC_DIRS, IDC_DIREDIT, DDL_DIRECTORY | DDL_DRIVES);
|
||||
SetFocus(GetDlgItem(hwndDlg, IDC_DIRS));
|
||||
break;
|
||||
}
|
||||
case WM_CLOSE:
|
||||
{
|
||||
EndDialog(hwndDlg, IDC_CANCEL);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int WINAPI
|
||||
WinMain(
|
||||
HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpszCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
char str[MAX_PATH + 32];
|
||||
if(DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), 0, DlgMainProc) == IDC_OK)
|
||||
{
|
||||
sprintf(str, "You selected \"%s\"", selected);
|
||||
MessageBox(0, str, "Selected file", MB_ICONINFORMATION);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1,14 +0,0 @@
|
||||
#include <defines.h>
|
||||
#include <reactos/resource.h>
|
||||
#include "resource.h"
|
||||
|
||||
IDD_MAIN DIALOG DISCARDABLE 20, 20, 220, 140
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
FONT 8, "MS Sans Serif"
|
||||
CAPTION "Select a file"
|
||||
BEGIN
|
||||
EDITTEXT IDC_DIREDIT, 5, 5, 210, 13, ES_READONLY | ES_LEFT | WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
LISTBOX IDC_DIRS, 5, 23, 210, 92, LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL
|
||||
PUSHBUTTON "&OK", IDC_OK, 60, 120, 40, 15, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
PUSHBUTTON "&Cancel", IDC_CANCEL, 120, 120, 40, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
END
|
@@ -1,21 +0,0 @@
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = no
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = windows
|
||||
|
||||
TARGET_NAME = dirdlg
|
||||
|
||||
TARGET_SDKLIBS = ntdll.a kernel32.a gdi32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -1,6 +0,0 @@
|
||||
#define IDD_MAIN 101
|
||||
|
||||
#define IDC_OK 1
|
||||
#define IDC_CANCEL 2
|
||||
#define IDC_DIRS 100
|
||||
#define IDC_DIREDIT 101
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,165 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2004 ReactOS Team
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS diskspeed.exe
|
||||
* FILE: apps/tests/diskspeed/diskspeed.c
|
||||
* PURPOSE: Determines disk transfer rates
|
||||
* PROGRAMMER: Hartmut Birr
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ddk/ntddk.h>
|
||||
#include <ddk/ntddscsi.h>
|
||||
#include <ddk/scsi.h>
|
||||
|
||||
BOOL GetInquiryData(HANDLE hDevice, PINQUIRYDATA InquiryData)
|
||||
{
|
||||
BOOL Result;
|
||||
DWORD dwReturned;
|
||||
SCSI_ADDRESS ScsiAddress;
|
||||
PSCSI_ADAPTER_BUS_INFO AdapterInfo;
|
||||
PSCSI_INQUIRY_DATA InquiryBuffer;
|
||||
BYTE Buffer[4096];
|
||||
int i;
|
||||
|
||||
Result = DeviceIoControl(hDevice,
|
||||
IOCTL_SCSI_GET_ADDRESS,
|
||||
NULL,
|
||||
0,
|
||||
&ScsiAddress,
|
||||
sizeof(ScsiAddress),
|
||||
&dwReturned,
|
||||
FALSE);
|
||||
if (Result == FALSE)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
Result = DeviceIoControl(hDevice,
|
||||
IOCTL_SCSI_GET_INQUIRY_DATA,
|
||||
NULL,
|
||||
0,
|
||||
Buffer,
|
||||
sizeof(Buffer),
|
||||
&dwReturned,
|
||||
FALSE);
|
||||
if (Result)
|
||||
{
|
||||
AdapterInfo = (PSCSI_ADAPTER_BUS_INFO)Buffer;
|
||||
for (i = 0; i < AdapterInfo->NumberOfBuses; i++)
|
||||
{
|
||||
InquiryBuffer = (PSCSI_INQUIRY_DATA) (Buffer + AdapterInfo->BusData[i].InquiryDataOffset);
|
||||
if (AdapterInfo->BusData[i].InquiryDataOffset)
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
if (InquiryBuffer->PathId == ScsiAddress.PathId &&
|
||||
InquiryBuffer->TargetId == ScsiAddress.TargetId &&
|
||||
InquiryBuffer->Lun == ScsiAddress.Lun)
|
||||
{
|
||||
memcpy(InquiryData, InquiryBuffer->InquiryData, sizeof(INQUIRYDATA));
|
||||
return TRUE;
|
||||
}
|
||||
if (InquiryBuffer->NextInquiryDataOffset == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
InquiryBuffer = (PSCSI_INQUIRY_DATA) (Buffer + InquiryBuffer->NextInquiryDataOffset);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main(void)
|
||||
{
|
||||
HANDLE hDevice;
|
||||
OVERLAPPED ov;
|
||||
|
||||
PBYTE Buffer;
|
||||
DWORD Start;
|
||||
DWORD dwReturned;
|
||||
DWORD dwReadTotal;
|
||||
DWORD Size;
|
||||
BOOL Result;
|
||||
ULONG Drive;
|
||||
CHAR Name[20];
|
||||
|
||||
INQUIRYDATA InquiryData;
|
||||
|
||||
|
||||
Drive = 0;
|
||||
while (1)
|
||||
{
|
||||
sprintf(Name, "\\\\.\\PHYSICALDRIVE%ld", Drive);
|
||||
hDevice = CreateFile(Name,
|
||||
GENERIC_READ,
|
||||
FILE_SHARE_READ,
|
||||
NULL,
|
||||
OPEN_EXISTING,
|
||||
0,
|
||||
NULL);
|
||||
if (hDevice == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
if (Drive > 0)
|
||||
{
|
||||
VirtualFree(Buffer, 512 * 1024, MEM_RELEASE);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Cannot open '%s'\n", Name);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (Drive == 0)
|
||||
{
|
||||
printf("Transfer Size (kB) 1 2 4 8 16 32 64 128 256\n");
|
||||
printf("Transfer Rate (MB/s)\n");
|
||||
printf("-------------------------------------------------------------------------------\n");
|
||||
|
||||
Buffer = VirtualAlloc(NULL, 512 * 1024, MEM_COMMIT, PAGE_READWRITE);
|
||||
}
|
||||
Result = GetInquiryData(hDevice, &InquiryData);
|
||||
if (Result)
|
||||
{
|
||||
printf("%.24s ", InquiryData.VendorId);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Disk %ld ", Drive + 1);
|
||||
}
|
||||
Size = 1024;
|
||||
memset(&ov, 0, sizeof(OVERLAPPED));
|
||||
while (Size <= 256 * 1024)
|
||||
{
|
||||
memset(Buffer, 0, Size);
|
||||
dwReadTotal = 0;
|
||||
|
||||
Start = GetTickCount() + 2000;
|
||||
while (Start > GetTickCount())
|
||||
{
|
||||
Result = ReadFile(hDevice, Buffer, Size, &dwReturned, &ov);
|
||||
if (Result)
|
||||
{
|
||||
dwReadTotal += dwReturned;
|
||||
ov.Offset += dwReturned;
|
||||
}
|
||||
}
|
||||
dwReadTotal /= 2048;
|
||||
printf("%3ld.%ld ", dwReadTotal / 1024, (dwReadTotal % 1024) * 10 / 1024);
|
||||
Size *= 2;
|
||||
}
|
||||
printf("\n");
|
||||
CloseHandle(hDevice);
|
||||
Drive++;
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
@@ -1,23 +0,0 @@
|
||||
# $Id: makefile,v 1.1 2004/03/07 20:12:13 hbirr Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = console
|
||||
|
||||
TARGET_NAME = diskspeed
|
||||
|
||||
TARGET_SDKLIBS = kernel32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -1,6 +0,0 @@
|
||||
*.o
|
||||
*.d
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
@@ -1,33 +0,0 @@
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <WinError.h>
|
||||
#include <WinDNS.h>
|
||||
#include <winsock2.h>
|
||||
#include <assert.h>
|
||||
|
||||
int main( int argc, char **argv ) {
|
||||
PDNS_RECORD QueryReply, AddrResponse;
|
||||
DWORD Addr;
|
||||
|
||||
assert (DnsValidateName( "||||", DnsNameDomain ) == DNS_ERROR_INVALID_NAME_CHAR);
|
||||
assert (DnsValidateName( "a.b.c", DnsNameDomainLabel ) == DNS_ERROR_INVALID_NAME);
|
||||
assert (DnsValidateName( "1234", DnsNameDomainLabel ) == ERROR_SUCCESS);
|
||||
assert (DnsValidateName( "fubar", DnsNameDomain ) == ERROR_SUCCESS);
|
||||
assert (DnsQuery ("www.reactos.com", DNS_TYPE_A, DNS_QUERY_STANDARD,
|
||||
NULL, &QueryReply, NULL) == ERROR_SUCCESS);
|
||||
AddrResponse = QueryReply;
|
||||
while( AddrResponse ) {
|
||||
if( AddrResponse->wType == DNS_TYPE_A ) {
|
||||
Addr = ntohl( AddrResponse->Data.A.IpAddress );
|
||||
printf( "www.reactos.com == %d.%d.%d.%d\n",
|
||||
(int)(Addr >> 24) & 0xff,
|
||||
(int)(Addr >> 16) & 0xff,
|
||||
(int)(Addr >> 8) & 0xff,
|
||||
(int)Addr & 0xff );
|
||||
}
|
||||
AddrResponse = AddrResponse->pNext;
|
||||
}
|
||||
DnsRecordListFree( QueryReply, DnsFreeRecordList );
|
||||
|
||||
return 0;
|
||||
}
|
@@ -1,22 +0,0 @@
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = console
|
||||
|
||||
TARGET_NAME = dnsapi
|
||||
|
||||
TARGET_SDKLIBS = dnsapi.a ws2_32.a kernel32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -D__USE_W32API -Wall -Werror -g
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -1,29 +0,0 @@
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <WinError.h>
|
||||
#include <WinDNS.h>
|
||||
#include <winsock2.h>
|
||||
#include <assert.h>
|
||||
|
||||
int main( int argc, char **argv ) {
|
||||
PDNS_RECORD QueryReply, AddrResponse;
|
||||
DWORD Addr;
|
||||
|
||||
assert (DnsQuery ("www.reactos.com", DNS_TYPE_A, DNS_QUERY_STANDARD,
|
||||
NULL, &QueryReply, NULL) == ERROR_SUCCESS);
|
||||
AddrResponse = QueryReply;
|
||||
while( AddrResponse ) {
|
||||
if( AddrResponse->wType == DNS_TYPE_A ) {
|
||||
Addr = ntohl( AddrResponse->Data.A.IpAddress );
|
||||
printf( "www.reactos.com == %d.%d.%d.%d\n",
|
||||
(int)(Addr >> 24) & 0xff,
|
||||
(int)(Addr >> 16) & 0xff,
|
||||
(int)(Addr >> 8) & 0xff,
|
||||
(int)Addr & 0xff );
|
||||
}
|
||||
AddrResponse = AddrResponse->pNext;
|
||||
}
|
||||
DnsRecordListFree( QueryReply, DnsFreeRecordList );
|
||||
|
||||
return 0;
|
||||
}
|
@@ -1,22 +0,0 @@
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
TARGET_NORC = yes
|
||||
|
||||
TARGET_TYPE = program
|
||||
|
||||
TARGET_APPTYPE = console
|
||||
|
||||
TARGET_NAME = dnsquery
|
||||
|
||||
TARGET_SDKLIBS = dnsapi.a ws2_32.a kernel32.a
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -D__USE_W32API -Wall -Werror -g
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
# EOF
|
@@ -3,4 +3,3 @@
|
||||
*.exe
|
||||
*.coff
|
||||
*.sym
|
||||
*.map
|
||||
|
@@ -5,7 +5,7 @@ int main()
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("TickCountLow: %lx\n",
|
||||
printf("TickCountLow: %x\n",
|
||||
SharedUserData->TickCountLow);
|
||||
printf("Drives: ");
|
||||
for (i = 0; i < 26; i++)
|
||||
@@ -48,5 +48,4 @@ int main()
|
||||
}
|
||||
}
|
||||
printf("\n\n");
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# $Id: makefile,v 1.7 2003/11/14 17:13:16 weiden Exp $
|
||||
# $Id: makefile,v 1.6 2002/06/02 19:24:58 chorns Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
@@ -12,8 +12,6 @@ TARGET_NAME = dump_shared_data
|
||||
|
||||
TARGET_OBJECTS = $(TARGET_NAME).o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user